web API 第七天

101 阅读2分钟

正则表达式

一、什么是正则表达式?

本质:用于匹配字符串中字符串组合的模式,在JS中,正则表达式也是对象

作用:通常用来查找,替换那些复合正则表达式的文本

使用场景

​ 1.验证表单:只能输入英文,数字或者下划线等

​ 2.过滤页面敏感词汇,或者从字符串获取想要的特定部分

1650011240249

二、语法

1.定义规则(//是字面量)

1650011313202

2.查找,判断是否有符合的字符串

​ test()方法,用来查看正则表达式与指定字符串是否匹配

1650011397465

​ exec()方法 在一个指定字符串中执行一个搜索匹配

1650012973737

 <script>
        /* 正则的作用 寻找字符串 检测这个字符串有没有我想要的文字 */
        const str = `金钱对你以为着什么?你有梦想吗?`

        /* 定义规则: 梦想两个字 */
        const reg = /梦想/

        /* 判断 str中,有没有reg的规则 */
        console.log(reg.test(str));
</script>

三、元字符

​ 本质:是具有特殊含义的字符,提高灵活性和强大的匹配功能

​ 作用:规定用户只能输入英文26个字母,用普通字符得写a~z

1.普通字符(不是元字符 作对比)

​ 大多数的字符仅能描述它们本身,称为普通字符

​ 例如:所有字母,数字

​ 普通字符只能匹配字符串中与他们相同的字符

2.边界符(表示位置,开头和结尾)

1650013195142

<body>
    <script>
        let str = `你有梦想吗?你想坐拥亿万资产吗`

        let reg = /^资产$/ //以“资”开头,“产”结尾

        console.log(reg.test(str)); // 为false  必须是str =`资产`时,为true

        let reg1 = /^你有梦想吗?你想坐拥亿万资产吗$/
        console.log(reg1.test(str)); // 为true 

        let str1 = `进来123`

        let reg2 =/^进来/ // 表示必须以 “进来”开头 即可
        console.log(reg2.test(str1)); //为true
        
        let reg3 =/123$/ // 表示必须以 “123”结尾 即可
        console.log(reg3.test(str1)); //为true

        /* 总结:边界符 开头^ 结尾$ 根据需求指定相应规则 */
</script>

总结

​ 1.边界符 开头^ 结尾$ 根据需求指定相应规则

​ 2.^&一起必须精确匹配

3.量词(修饰符,表示重复次数)

1650014215689

<script>
        /* let str = `路路`
        let reg = /^路路&/ */
        console.log(/^路路$/.test(`路路`));
========================================================
        // *表示  放在前面的字符串 只能出现0次或者多次
        /* console.log(/^路*$/.test(``)); 
        console.log(/^路*$/.test(`路`));
        console.log(/^路*$/.test(`路路`));
        console.log(/^路*$/.test(`路路路`));  *///全都是true

        //+表示  放在前面的字符串 只能出现1次或者多次
        /* console.log(/^路+$/.test(``));  // false 一下都是true
        console.log(/^路+$/.test(`路`));
        console.log(/^路+$/.test(`路路`));
        console.log(/^路+$/.test(`路路路`)); */

         //?表示  放在前面的字符串 只能出现0次或者1次
        /* console.log(/^路?$/.test(``));  // true
        console.log(/^路?$/.test(`路`)); // true
        console.log(/^路?$/.test(`路路`)); // 和一下都是false
        console.log(/^路?$/.test(`路路路`)); */

        //{n}表示  放在前面的字符串 只能出现n次 自定义
        /* console.log(/^路?{2}/.test(``));  
        console.log(/^路?{2}/.test(`路`)); 
        console.log(/^路?{2}/.test(`路路`)); // 只有这个是true
        console.log(/^路?{2}/.test(`路路路`)); */

        //{n,}表示  放在前面的字符串 最少出现n次 自定义
        /* console.log(/^路{2,}$/.test(``));  //fa
        console.log(/^路{2,}$/.test(`路`)); //fa
        console.log(/^路{2,}$/.test(`路路`)); //tr
        console.log(/^路{2,}$/.test(`路路路`)); *///tr

         // {n,m} 放在它前面的字符 最少出现n次,最大是m次
        console.log(/^路{0,2}$/.test('')); // true
        console.log(/^路{0,2}$/.test('路'));  // true
        console.log(/^路{0,2}$/.test('路路')); // true
        console.log(/^路{0,2}$/.test('路路路'));  // false 
</script>

字符类(字符合集)

1650015312260

<script>
        //. 表示除了(换行符之外)任意数字 1个
        console.log(/路.飞/.test(`路大飞`));//true
        console.log(/路.飞/.test(`路飞`));//false

        // \d 表示数字 1个
        console.log(/路\d飞/.test(`路1飞`));//true
        console.log(/路\d飞/.test(`路a飞`));//false

        // \D 不是数字 之外任意1个
        console.log(/路\D飞/.test(`路大飞`));//true
        console.log(/路\D飞/.test(`路1飞`));//false

        // \w 字母 数字 下划线  1个
        console.log(/路\w飞/.test(`路大飞`));//faler
        console.log(/路\w飞/.test(`路1飞`));//true

        // \W 除了 字母 数字 下划线 之外1个
        console.log(/路\W飞/.test(`路大飞`));//true
        console.log(/路\W飞/.test(`路1飞`));//false
 
        // \s 空格 1个
        console.log(/路\s飞/.test(`路 飞`));//true
        console.log(/路\s飞/.test(`路1飞`));//false

        // \S 除了空格之外 1个
        console.log(/路\S飞/.test(`路大飞`));//true
        console.log(/路\S飞/.test(`路 飞`));//false

        /* 注意:一个只能对应一个 */
</script>
<SCript>
        //[ab] = 匹配a 或者 b
        console.log(/[ab]/.test(`a`));

        // a-z 匹配a到z
        console.log(/[a-z]/.test(`a`));
        // A-Z 大写 一样
        console.log(/[A-Z]/.test(`a`)); // false

        // 0-9 
        console.log(/[0-9]/.test(`2`));

        // 这样错 只能0 1 2 , 10 12 12 , 100 直接0-100为false
        console.log(/[0-100]/.test(`2`));

        //同时满足 连写
        console.log(/[0-9a-zA-Z]/.test(`a123`));     
</SCript>