代码改变世界

正则表达式

2019-08-03 15:35  张海峰999  阅读(211)  评论(0编辑  收藏  举报

1.

字符集* , 字符集? , 字符集+

eg:abc*d    匹配abcd  abccd  abccccd 等,   *代表前面字符可以不出现,也可以出现一次或多次(0次,1次,多次)

abc?d     匹配abd  abcd     ?代表前面字符最只出现一次或0次(0次,1次)

abc+d     匹配abcd  abccd  abcccd等      +代表前面的字符至少出现一次(1次,多次)

 

2.

[0-9]   0,1,2,3,4,5,6,7,8,9

 [a-z]    匹配小写英文字母

[A-Z]    匹配大写英文字母

[0-9a-zA-Z]    匹配以上三种情况

[\u4e00-\u9fa5]    匹配汉字

 

3.

\d  匹配以为数字    ===>>  [0-9]

\w  匹配以为数字,字母或_   

\s 匹配任何空白字符,包括空格、制表符、换页符等等

. 匹配所有的字符

 

4.量词

{n}    n为非负整数,匹配前面的字符n次     abc{2}  ===> abcc

{n,}   n为非负整数,匹配前面的字符至少出现n次   abc{3,} ===>>abccc

{n.m}  n,m均为非负整数n<=m   匹配前面的字符至少出现n次至多出现m次    abc{2,4} =>>>abcc abccc abcccc

 

5.特殊字符

^  匹配输入字符串的开始位置  ===>>>[^abc] 匹配除abc以外的字符

$ 匹配输入字符串的结束位置

\  将下一个字符 匹配 成为一个特殊字符或原义字符

|  =>>>  x|y 匹配x或y

 

 

 

常用正则

qq号码[1-9]\d{4,11}

qq邮箱  [1-9]\d{4,11} @[q][q].(com|cn)

网易邮箱  [a-zA-Z1-9]@[1][6][3].(com|cn)

邮政编码  [1-9][0-9]{5}

身份证号   [1-9]\d{5}((18|19)\d{2}|([2][0][0-1][0-9]))((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]

手机号码  (\+86|0086)?\s*1[3456789]\d{9}

密码  [A-Z][a-z0-9A-Z]{5,17}首字母大写

 

切割

将原字符串按照指定字符分隔成多个子字符串

var arr = str.split(/正则/)

切割后的多个子字符串组成的数组,结果中不再包含分隔符

将字符串打伞成字符串数组   var char = pid.split("")

 var pid = "5654655644";
 var  chars = pid.split("");
 console.log(chars);

 

var mail = "888888888@qq.com";
    var arr = mail.split(/@/);
    console.log(arr);     "888888888"   "qq.com"
    var qqnumber = arr[0];
    var server = arr[1];
    console.log(qqnumber,server)

替换

将字符串中所有敏感词替换成新的内容,无权修改原字符串,必须用变量接住替换过的新字符串

var str = str.replace(/正则表达式/ig,"替换值")

var str = "a a b b c c d d ";
 str = str.replace(/a/gi, "aa");
 console.log(str);   结果(aa,aa,b,b,c,c,d,d)

 

根据不同的关键词动态替换不同的值

str = str.repalce(/正则表达式/gi,function(kw){
   kw本次找到的关键词
    return 根据kw计算出新的替换词
  })
    var str = "今天真特么热,热得快炸了,你开空调啊,开个锤子的空调";
    str = str.replace(/[特么锤子]/g,
     kw=>kw.length==2?"*":"*")
     //function(kw){return kw.length==2?"*":"*"}
    console.log(str);

 

判断字符串中是否包含了符合规范的敏感词

返回值:找到的关键词的下标,如果找不到返回-1

var str = str.search(/正则/)

 

使用正则表达式查找指定一类关键词的内容

var arr = str.match(/正则/ig)

没找返回null

 

 

   RegExp  正则的API  查找和验证
   var reg = /正则/ig;      正则是固定不变的
    var str = "a b a c , d b d c";
    var reg = /a/g;
    /双斜杠中写的内容遵的是正则的语法,因此想要用/需加上\作为转移符/
    var arr = str.match(reg);
    console.log(arr);
     var reg2 = /a/g;
    console.log(reg == reg2);//false  两个引用类型地址不可能一样

    var msg = "你知道伤心总是难免的,又何苦一往情深";
        var names =["伤心","一往情深"];
        //动态生成正则表达式
        var regs = new RegExp(names.join("|"),"g");
        var arr1 = msg.match(regs);
        console.log(arr1);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 // 返回值:切割后的多个子字符串组成的数组,结果中不存在包含分隔符