JavaScript10-BOM和正则表达式

JavaScript10-BOM和正则表达式

1.BOM分类

 // 1 BOM 浏览器对象模型
//      Window 代表浏览器当前窗口
//      History 代表浏览器历史记录
//      Location 代表浏览器地址栏
//      Navigator 代表浏览器信息,如浏览器版本
//      Screen 代表设备屏幕信息

// 2 BOM 对象的访问,BOM对象都是window属性,所以可以直接访问。
console.log(history);
console.log(window.history);

console.log(location);
console.log(window.location);

console.log(navigator === window.navigator); // true

console.log(screen === window.screen); // true

2.history

<html lang="en">
<head>
    <meta charset="UTF-8">
    <script>
        window.onload = function () {
            document.getElementById('btn01').onclick = function () {
                // history 表示浏览器的历史记录,由于隐私问题,history无法访问具体的历史记录,
                // 只能进行前后的翻页。

                // history.length 当前访问的页面数量。
                console.log(history.length);

                // history.forward() 切换到前边访问的网站。
                //history.forward();

                // history.back() 相当与浏览器的回退按钮。
                history.back();

                // history.go() 跳转到指定的历史记录。
                // history.go(1)相当于history.forward()。
                history.go(1);
            }
        }
    </script>
</head>
<body>

<button id="btn01">btn01</button>
</body>
</html>

3.location

<html lang="en">
<head>
    <meta charset="UTF-8">
    <script>
        window.onload = function () {
            document.getElementById('btn01').onclick = function () {
                // location 表示浏览器地址栏信息
                console.log(location);

                // 获取当前地址的端口
                console.log(location.port); // 63342

                // 可以通知直接修改location的值来进行网页跳转,但是会产生历史记录。
                //location = 'https://www.baidu.com';

                // location.assign() 进行网页跳转,和直接修改location一样,都会产生历史记录。
                // location.assign('https://www.baidu.com');

                // location.replace() 网页跳转,不会产生历史记录,相当与网页替换。
                // location.replace('https://www.baidu.com');

                // location.reload() 重新加载网页。
                // location.reload();

                // location.reload(true);参数为是否强制刷新。
                location.reload(true);
            }
        }
    </script>
</head>
<body>

<button id="btn01">btn01</button>
</body>
</html>

4.navigator

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>05-navigator</title>
    <script>
        window.onload = function () {
            document.getElementById('btn01').onclick = function () {
                // navigator表示浏览器对象信息
                // 可以通过navigator识别出来不同的浏览器,但是有的浏览器不想被识别出来,会修改navigator返回的数据。
                // 所以navigator中很多的属性是没有作用的。

                // navigator.userAgent,使用代理,浏览器代理我们上网,所以返回浏览器信息

                // 各个浏览器返回的信息。
                // Chrome
                // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36

                // Firefox
                // Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0

                // IE
                // Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 9.9.0)

                // IE11
                // Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 9.9.0; rv:11.0) like Gecko
                let userAgent = navigator.userAgent;
                console.log(userAgent);
            }
        }
    </script>
</head>
<body>

<button id="btn01">btn01</button>
</body>
</html>

5.IE浏览器的判断

<html lang="en">
<head>
    <meta charset="UTF-8">
    <script>
        window.onload = function () {
            document.getElementById('btn01').onclick = function () {
                // IE浏览器中独有ActiveXObject对象。
                if (window.ActiveXObject) {
                    // window.ActiveXObject IE浏览器返回。
                    /*

                    function ActiveXObject() {
                        [native code]
                    }
                     */
                    alert(window.ActiveXObject);
                }

                // 1 IE11之前的版本可以使用 if (window.ActiveXObject) {} 来判断是否是IE浏览器。
                // 2 IE11对ActiveXObject对象的boolean值计算返回false。

                console.log(!!window.ActiveXObject); // false

                // 3 对于IE11可以使用 ('ActiveXObject' in window) 来判断是否是IE浏览器。
                if ('ActiveXObject' in window) {
                    alert(window.ActiveXObject);
                }
            }
        }
    </script>
</head>
<body>

<button id="btn01">btn01</button>
</body>
</html>

6.正则表达式

// 1 创建正则表达式
// 通过创建对象来创建正则表达式,对象有两个参数:正则表达式 匹配模式
let r01 = new RegExp('a');
// 通过字面量来创建正则表达式。
let r02 = /a/;

// 校验字符串是否匹配正则表达式。
console.log(r01.test('abc')); // true
console.log(r02.test('abc')); // true

console.log(/a/.test('cb')); // false
console.log(/ab/.test('acd')); // false
console.log(/Abc/.test('abc')); // false

// 2 匹配模式,i 忽略大小写匹配。
// /Abc/i等价于 new RegExp('Abc', 'i');
console.log(/Abc/i.test('abc')); // true

7.正则量词

// 1 {m} 正好出现m次。正好出现2次
console.log(/a{2}/.test('aab')); // true

// 2 {m,} 至少出现m次。至少出现2次
console.log(/a{2,}/.test('aaab')); // true

// 3 {m,n} 出现m-n次。正好出现2-3次
console.log(/(ab){2,3}/.test('abab')); // true

// 4 + 至少出现1次,等价于{1,}
console.log(/a+/.test('aab')); // true

// 5 ? 0-1次,等价于{0,1}
console.log(/a?/.test('aa')); // true

// 6 * 0-多次,等价于{0,}
console.log(/a+/.test('aab')); // true

8.正则语法

// 1 | 或
console.log(/a|b/.test('ab')); // true
console.log(/a|b/.test('a')); // true
console.log(/a|b/.test('b')); // true

// 2 [] 出现在[]中的字符都表示或
console.log(/[ab]/.test('a')); // true
console.log(/[ab]/.test('ab')); // true
console.log(/[ab]/.test('b')); // true

// 3 [a-z] 任意小写字母
console.log(/[a-z]/.test('ab')); // true

// 4 [A-Z] 任意大写字母
console.log(/[A-Z]/.test('Ab')); // true

// 5 [0-9] 任意数字
console.log(/[0-9]/.test('0')); // true

// 6 [0-9a-zA-Z] 任意数字、小写字母和大写字母
console.log(/[0-9a-zA-Z]/.test('00')); // true

// 7 [^a] 出现在[]中的^表示除了,[^0-9] 除了数字。
console.log(/[^0-9]/.test('0')); // false

// 8 ^ 检查是否以制定字符开头
console.log(/^a/.test('ba')); // false
console.log(/^a/.test('ab')); // true

// 9 $ 检查是否以制定字符结尾
console.log(/a$/.test('ba')); // true
// 以a开头并且以a结尾,只匹配a
console.log(/^a$/.test('aa')); // false

// 10 使用正则判断字段传中是否含有 .
// . 表示任意字符
console.log(/./.test('aba')); // true

// 11 \. 表示.,在正则中需要使用\对.进行转义。
console.log(/\./.test('.')); // true

// 如果使用字符表示正则,则\也需要转义。
console.log(new RegExp('\\.').test('.')); // true

// 12 \w 任意单词字符,相当与[0-9a-zA-Z_]
console.log(/\w/.test('a')); // true
// \W 除了任意单词字符,相当与[^0-9a-zA-Z_]
console.log(/\W/.test('a')); // false
console.log(/\W/.test('%')); // true

// 13 \d 任意数字,相当与[0-9];\D 除了数字,相当与[^0-9]
console.log(/\d/.test('0')); // true
console.log(/\D/.test('a')); // true

// 14 \s 空格;\D,除了空格。
console.log(/\s/.test(' ')); // true
console.log(/\S/.test('aa')); // true

// 15 匹配邮箱,前后如果没有加^$,就会在给定的字符中寻找是否有合法的邮箱。
// 前后加^$表示匹配正则。
let r = /^\w+(\.\w)?@[0-9a-z-]+(\.[a-z]{2-5}){1,2}$/;

9.字符串中和正则表达式相关的方法

// 1 search() search用来判断字符串中是否包含制定的正则,
// search() 返回匹配到的内容在字符串中的索引,如果没有匹配到则返回-1。
let s01 = 'abc123456adc';
// 字符串中是否保存数字
console.log(s01.search(/\d/)); // 3

// 2 split() 根据正则将字符串拆分。
let s02 = 'abc123ghk124wz';
console.log(s02.split(/12[3|4]/)); // (3) ['abc', 'ghk', 'wz']

// 3 replace() 根据正则表达式替换,replace默认只会替换第一个匹配的内容。
let s03 = 'abc123ghk124wz';
console.log(s03.replace(/12[3|4]/, '中')); // abc中ghk124wz

// 使用匹配模式替换所有符合正则的内容
console.log(s03.replace(/12[3|4]/g, '中')); // abc中ghk中wz

// 4 匹配模式
//      i 忽略大小写
//      g 全局匹配
console.log(s03.replace(/12[3|4]/gi, '中')); // abc中ghk中wz


// 5 match() 提取出正则表达式匹配到的字符串,默认只会提取到第一个匹配的内容。
// match() 会返回一个数组,表示提取到的内容。
let s04 = 'abc123ghk124wz';
let match = s04.match(/12[3|4]/);
console.log(match.length); // 1
console.log(match[0]); // 123

// 开启全局匹配,match会返回匹配到的所有的内容
match = s04.match(/12[3|4]/g);
console.log(match.length); // 2
console.log(match[0]); // 123
console.log(match[1]); // 124

posted @ 2022-08-27 11:57  行稳致远方  阅读(40)  评论(0)    收藏  举报