JavaScript正则表达式基础

js正则表达式

这是关于js的正则表达式的介绍性质的代码,我还写了一片正则表达式的应用的文章,学会了的同学可以看一看。js正则表达式实战

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
        正则的用处:
            检验一个字符串是否符合规则
            获取字符串中符合规则的内容
    -->
    <script>
        /*
        一:创建正则表达式的对象
            语法:
            1. RegExp 对象创建: var 变量 = new RegExp("正则表达式","匹配模式");
            2. 使用字面量创建正则表达式: var 变量 = /正则表达式/匹配模式
        二:使用typeof检查正则对象,会返回object
        三:匹配模式:(一个正则表达式可以有多个匹配模式)(省略匹配模式则默认不忽略大小写不全局匹配)
            i : 忽略大小写(正则匹配时不考虑大小写的区别)
            g : 全局匹配(不会匹配到了一个就不往下继续匹配了)
            m : 执行多匹配
        */
        var reg = new RegExp("a","i"); //匹配 a ;
        var reg2 = /a/i;

        /*
            测试内容是否与正则表达式匹配的的方法:
            test()
                --检查一个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false
            exec()
                --检查一个字符串是否符合正则表达式的规则,该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
        */
        console.log('----- 测试方法 -----');
        var str = "a";
        var result = reg.test(str);
        console.log(result); // true;
        var result = reg.exec(str);
        console.log(result); // 返回数组 Array["a"];

        /*
            方括号:用于查找某个范围内的字符
        */
        console.log('----- 方括号 -----');
        // 1.  ab  必须有 ab
        reg = /ab/;
        console.log("--- 1 ---");
        console.log(reg.test("abcd")); // true
        console.log(reg.test("bacd")); // false

        // 2. a|b  有a或b
        reg = /a|b/;
        console.log("--- 2 ---");
        console.log(reg.test("cd")); // false
        console.log(reg.test("acd")); // true
        console.log(reg.test("bcd")); // true
        console.log(reg.test("bacd")); // true

        // 3. [a-d]  a到d的任意字母
        reg1 = /[a-z]/; //存在任意小写字母
        reg2 = /[A-Z]/; //存在任意大写字母
        reg3 = /[A-z]/; //存在任意字母
        console.log("--- 3 ---");
        console.log(reg1.test("12ab")); // true
        console.log(reg2.test("12AB")); // true
        console.log(reg3.test("12Ab")); // true
        console.log(reg3.test("12")); // false

        // 4. /a[bde]c/
        reg = /a[bde]c/; // 需要有 abc或adc或aec,此时括号内的字母必须只有一个
        console.log("--- 4 ---");
        console.log(reg.test("abc")); // true
        console.log(reg.test("abdc")); // false
        console.log(reg.test("cabc")); // true
        console.log(reg.test("ac")); // false

        // 5. [^ab]  除了ab以外的东西
        reg = /[^ab]/ //存在除了ab以外的字符
        console.log("--- 5 ---");
        console.log(reg.test("abc")); // true
        console.log(reg.test("ab")); // false
        console.log(reg.test("c")); // true

        // 6. [^0-9]  存在不是数字的字符
        reg = /[^0-9]/;
        console.log("--- 6 ---");
        console.log(reg.test("12")); // false
        console.log(reg.test("as12")); // true
        console.log(reg.test("ac")); // true

        /*
            元字符:拥有特殊含义的字符
        */
        console.log('----- 元字符 -----');

        // .  查找单个字符,除了换行和行结束符
        var str = 'that is hot!';
        var reg = /h.t/g;
        console.log(str.match(reg)); // Array['hat','hot'];

        // \w  查找单词字符,包括a-z,A-Z,0-9,以及下划线_
        var str = "give m_e 10%!";
        var reg = /\w/g;
        console.log(str.match(reg)); // Array(10) [ "g", "i", "v", "e", "m", "_", "e", "1", "0" ]

        // \W  查找非单词字符
        var str = "give m_e 10%!";
        var reg = /\W/g;
        console.log(str.match(reg)); // Array(4) [ " ", " ", "%", "!" ]

        // \d  查找数字
        var str = "give m_e 10%!";
        var reg = /\d/g;
        console.log(str.match(reg)); // Array [ "1", "0" ]

        // \D  查找非数字字符
        var str = "give m_e 10%!";
        var reg = /\D/g;
        console.log(str.match(reg)); // Array(11) [ "g", "i", "v", "e", " ", "m", "_", "e", " ", "%", … ]

        // \s  查找空白字符
        var str = "give m_e 10%!";
        var reg = /\s/g;
        console.log(str.match(reg)); // Array [ " ", " " ]

        // \S  查找非空白字符
        var str = "give m_e 10%!";
        var reg = /\S/g;
        console.log(str.match(reg)); // Array(11) [ "g", "i", "v", "e", "m", "_", "e", "1", "0", "%", … ]

        // \b  匹配单词边界 : \b 元字符通常用于查找位于单词的开头或结尾的匹配。
        var str = "give m_e 10%!";
        var reg = /\bgi/g;
        console.log(str.match(reg)); // Array["gi"]
        var reg = /ve\b/g;
        console.log(str.match(reg)); // Array["ve"]
        var reg = /v\b/g;
        console.log(str.match(reg)); // null

        // \B  匹配非单词边界:匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。
        var str = "give very";
        var reg = /\Bve/g; // 匹配不处于单词开头的ve
        console.log(str.match(reg)); // Array["ve"]

        // \n  查找换行符
        var str = "Visit RUNOOB.\n Learn JavaScript";
        var reg = /\n/g;
        console.log(str.search(reg)); // 13

        /*
            量词:
        */
        console.log('----- 量词 -----');

        // n+  匹配任何包含至少一个 n 的字符串。
        var str = "Hellooo World! Hello Runoob!";
        var reg = /o+/g;
        console.log(str.match(reg)); // Array(4) [ "ooo", "o", "o", "oo" ]
        var reg = /\w+/g;
        console.log(str.match(reg)); // Array(4) [ "Hellooo", "World", "Hello", "Runoob" ]

        // n*  匹配任何包含零个或多个 n 的字符串。
        var str = "Hellooo World! Hello W3Schools!";
        var reg = /lo*/g; // 对 "l" 进行全局搜索,包括其后紧跟的一个或多个 "o"
        console.log(str.match(reg)); // Array(6) [ "l", "looo", "l", "l", "lo", "l" ]

        // n?  匹配任何包含零个或一个 n 的字符串。
        var str = "1, 100 or 1000?";
        var reg = /10?/g;
        console.log(str.match(reg)); // Array(3) [ "1", "10", "10" ]

        // n{X}  匹配包含 X 个 n 的序列的字符串。X必须是数字
        var str = "100, 1000 or 10000?";
        var reg = /\d{4}/g; // 对包含四位数字序列的子串进行全局搜索,然后匹配连续的四个数字
        console.log(str.match(reg)); // Array [ "1000", "1000" ]

        // n{X,}  X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。
        var str = "100, 1000 or 10000?";
        var reg = /\d{3,}/g;
        console.log(str.match(reg)); // Array(3) [ "100", "1000", "10000" ]

        // n{X,Y}  X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。
        var str = "100, 1000 or 10000?";
        var reg = /\d{3,4}/g;
        console.log(str.match(reg)); // Array(3) [ "100", "1000", "1000" ]

        // n$  匹配任何结尾为 n 的字符串。
        var str = "isme this his";
        var reg = /is$/g;
        console.log(str.match(reg)); // Array [ "is" ]

        // ^n  匹配任何开头为 n 的字符串。
        var str = "isme this his";
        var reg = /^is/g;
        console.log(str.match(reg)); // Array [ "is" ]

        // ?=n  匹配任何其后紧接指定字符串 n 的字符串。
        var str = "Is this all there is";
        var reg = /is(?= all)/; // 对其后紧跟 "all" 的 "is" 进行全局搜索
        console.log(str.match(reg)); // Array [ "is" ]

        // ?!n  匹配任何其后没有紧接指定字符串 n 的字符串。
        var str = "Is this all there is";
        var reg = /is(?! all)/gi;
        console.log(str.match(reg)); // Array [ "Is", "is" ]

        /*
            正则方法:
                split()  可以将一个字符串拆分为一个数组
                search()  搜索字符串中是否含有指定内容
                match()  可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
                replace("被替换的内容","新的内容")  将字符串指定内容替换为新的内容
        */
        console.log('----- 正则方法 -----');

        // 1. split()  传递常量则按常量拆,传递正则表达式则按正则表达式拆
        console.log("--- split() ---");
        var str = "1a2b3c4d5e6f";
        var result = str.split("c");
        console.log(result); // Array["1a2b3","4d5e6f"]  注意:C被去掉了
        var result = str.split(/[a-z]/); //按字母拆
        console.log(result); // Array(7) {"1","2","3","4","5","6",""};
        var str = "10101010101";
        var result = str.split(1); //无需设置全局匹配即可拆所有的指定字符
        console.log(result); // Array(7) {"","0","0","0","0","0",""};

        // 2. search()  搜索字符串中是否含有指定内容,如果搜索到指定内容,则返回第一次出现的内容,没搜索到就返回-1
        console.log("--- search() ---");
        str = "hello abc hello abc";
        result = str.search("abc");
        console.log(result); // 6
        str = "hello abc hello aec afc";
        result = str.search(/a[bef]c/); // 搜索是否含有abc或aec或afc
        console.log(result); // 6

        // 3. match()  可以根据正则表达式,从一个字符串中将符合条件的内容提取出来
        console.log("--- match() ---");
        var str = "1a2b3c4d5e6f";
        result = str.match(/[A-z]/); // 提取其中符合条件的第一个英文字母
        console.log(result); // Array["a"]
        result = str.match(/[A-z]/g); // 提取其中符合条件的所有英文字母 :全局匹配
        console.log(result); // Array["a","b","c","d","e","f"]
        console.log(Array.isArray(result)); // true
        console.log(result[1]); // b

        // 4. replace("被替换的内容","新的内容")  将字符串指定内容替换为新的内容
        console.log("--- replace() ---");
        var str = "1a2b111ABC";
        result = str.replace("1a2b", "0");
        console.log(result); // 0111ABC
        result = str.replace(/a/gi, "0");
        console.log(result); // 102b1110BC

    </script>
</body>

</html>

更多相关内容大家可以前往我的个人博客浏览:eyes++的个人空间

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值