正则表达式

183 阅读2分钟

这是我参与8月更文挑战的第1天

元字符

元字符是指一位指定类型的字符

元字符功能
\d匹配一个数字
\D匹配一个非数字字符
\w匹配一个单 字字符(字母、数字、或者下划线)
\W匹配一个非单字字符
\s匹配一个空白字符、包括空格、制表符和换行符
.任意字符

开头和结尾

元字符功能
^匹配开头
$匹配结尾

元字符注意事项

如果使用new RegExp()写法,反斜杠需要多写一个

比如/^\d/和new RegExp('^\\d')是同一个意思

<script>

        //  正则表达式
        var regexp1 = /^\d\d\d-\d\d\d\d-\d\d\d$/;

        //待检测的字符串
        var str1 = '444-5555-000';

        console.log(regexp1.test(str1)); //true

        // 创建正则表达式

        var  regexp2 = /^\w\w\w-\w\w\w\w-\w\w\w$/;

        // 待检测的字符串

        var str2 = 'abc-__ab-123';
        console.log(regexp2.test(str2)); //true

        // 创建正则表达式
        //如果将 . 前面的反斜杠删除的话 .  就变成了元字符 任意字符 所有特殊字符前的反斜杠必须加上
        var regexp3 = /^\d\d\d\.\d\d\^\d\d\#$/ ;

        // 待检测字符

        var str3 = '123木45^62#';

        console.log(regexp3.test(str3));false
     </script>

方括号表示法

使用方括号,比如[xyz],可以创建一个字符,表示匹配方括号中的任意字符 可以使用短横-来指定一个字符范围,^表示否定

元字符等价的方括号表示法
\d[0-9]
\D[^0-9]
\w[A-Za-z0-9_]
\W[^A-Za-z0-9_]
<script>
        // 1 验证某字符串是否是五位字母,大小写均可
        var regexp1 = /^[a-zA-Z]{5}$/;

        var str1 = 'sSsdg';
        var str2 = 'sSsd5';
        console.log(regexp1.test(str1)); //true
        console.log(regexp1.test(str2));  //false


        // 2 请验证某字符串是否是五位,且仅有小写字母、点构成
        var regexp2 = /^[a-z\.]{5}$/;

        var str3 = 'sfd.s';
        var str4 = 'sfd.*';
        console.log(regexp2.test(str3)); //true
        console.log(regexp2.test(str4)); //false

        // 验证某字符串是否是4位小写字母,且最后一位不能是m字母
        // 创建正则表达式
        regexp3 = /^[a-z]{3}[a-ln-z]$/; 

        str5 = 'asfs';
        str6 = 'asfm';
        str7 = 'sd2f';

        console.log(regexp3.test(str5)); //true
        console.log(regexp3.test(str6)); //false
        console.log(regexp3.test(str7)); //false
    </script>

量词

量词意义
*匹配前面一个表达式0次或者多次。等价于{0,}
+匹配前面一个表达式1次或者多次。等价于{1,}
匹配前面的一个表达式0次或者1次。等价于{0,1}
{n}n是一个整数,匹配了前面一个字符刚好出现了n次
{n,}n是一个整数,匹配前面一个字符至少出现了n次
{n,m}n和m都是整数,匹配前面的字符至少n次最多m次

\

 <script>
        // 题目1 : 请验证字符串是否符合手机号码的规则:11位数字并且以1开头
        var regexp1 = /^1\d{10}$/;

        var str1 = '12345678912';
        var str2 = '24512555552';
        
        console.log(regexp1.test(str1));
        console.log(regexp1.test(str2));

        // 题目2 请验证某字符串是否是这样的:以字母开头,中间是任意位数字(至少1位)并以字母结尾

        var regexp2 = /^[a-zA-Z]\d+[a-zA-Z]$/;

        var str3 = 'a256456321a';
        console.log(regexp2.test(str3));

        // 题目3 请验证某字符串是否符合网址规则:以www.开头,中间是任意位的字符(最少一位字符数组下划线)后以.com结尾,也可以.com .cn结尾

        var regexp3 = /^w{3}\.\w+\.com(\.cn)?$/;

        console.log(regexp3.test(prompt()));
    </script>

修饰符

修饰符也叫作标志(flags),用于使用正则表达式实现高级搜索

修饰符意义
i不区分大小写搜索
g全局搜索


使用方法

var re = /m/gi;
var re = new RegExp('m','gi');

正则表达式的相关方法

正则表达式可以打点调用

方法简介
test()测试某字符串是否匹配正则表达式,返回布尔值
exec()根据正则表达式,在字符串中进行查找,返回结果数组或者null

\

text()方法

正则表达式的test()方法用来测试某字符串是否匹配此正则表达式,它返回true或false

exec()方法

exec()方法功能是:在一个指定字符串中执行一个搜索匹配查找,返回一个结果数组或null

exec()方法最有趣的是,有“g“修饰符的正则表达式将自动成为”有状态“的,这意味着可以对单个字符串中的多次匹配结果进行逐条的遍历

 <script>
        var str = 'abc123def456ghi789';

        var regexp = /\d+/g;
        var result;
        while(result = regexp.exec(str)){
            console.log(result[0]);
        }
    </script>

字符串的相关方法

字符串中有一些方法可以使用正则表达式

方法简介
search()在字符串中根据正则表达式进行查找匹配,返回首次匹配的位置索引,测试不到则返回-1
match()在字符串中根据正则表达式进行查找匹配,返回一个数组,找不到则返回null
replace()使用代替字符串替换掉匹配到的子字符串,可以使用正则表达式
split()分割字符串位数组,可以使用正则表达式
 <script>

        var str = 'abc123def4567';


        // search()方法,很想indexOf()
        var result1 = str.search(/\d+/g);
        var result2 = str.search(/m/g);
        console.log(result1);    //3
        console.log(result2);    //-1

        //match()方法
        var result3 = str.match(/\d+/g);
        console.log(result3);    // ["123", "4567"]

        //replace()方法
        var result4 = str.replace(/[a-z]+/g,'*');//注意+表示贪婪的,尽可能多的匹配连续的小写字母
        console.log(result4);    //*123*4567

        //split()方法

        var result5 = str.split(/\d+/g);
        console.log(result5);
   </script>

使用正则表达式进行表单验证

利用正则表达式进行表单验证是正则表达式最重要的实际应用

实际上,很多正则表达式不需要我们自己写,可以通过搜索引擎查找,可以拿来即用