javaScript复习(五)正则表达式RegExp

正则表达式(RegExp):专门规定字符串中字符*格式规则*的表达式

1、最简单的正则:一个关键词的原文,就是最简单的正则,如ABC

2、修饰符

i

执行对大小写不敏感的匹配(无论大小写都会匹配)

g

执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

3、字符集

①备选字符集:规定某*一位*字符可选的备选文字列表

      语法:[备选字符列表]

      强调:无论备选字符集中由有多少字符,都必须且只能选1个

           一个[]只代表1位字符!

      比如:3位数字:[0123456789][0123456789][0123456789]

   ② -:如果备选字符连续,可用-表示"到",比如:一位数字[0123456789]可以写成[0-9]

[abc]

查找方括号之间的任何字符。

[^abc]

查找任何不在方括号之间的字符。

[0-9]

查找任何从 0 至 9 的数字。

[a-z]

查找任何从小写 a 到小写 z 的字符。

[A-Z]

查找任何从大写 A 到大写 Z 的字符。

[A-z]

查找任何从大写 A 到小写 z 的字符。

③ 预定义字符集:专门表示常用的连续的字符集

\d

匹配一个数字字符。等价于[0-9]。(常用)

\w

匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。(常用)

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。(常用)

\D

匹配一个非数字字符。等价于[^0-9]。(了解)

\W

匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。(了解)

\S

匹配任何非空白字符。等价于[^ \f\n\r\t\v]。(了解)

.

匹配除了换行以外的其他所有字符

4. 量词:规定一个字符集出现的次数,用{}表示

    ①明确数量:3种:{min,max}:最少min位,最多max位

                      {min,}:至少min位

                      {n}:必须n位

    ②不确定数量:3种(常用)

           ? ==>{0,1}: 可有可无,最多1次

           * ==>{0,}:可有可无,多了数量不限

           + ==>{1,}:至少一次,多了数量不限

例:二代身份证号:共18位字符,至少17位数字,最后一位数字或x X,

           /d{17}[0-9xX]

例:手机号:+86或0086是中国大陆区号,在国外往国内打使用,可有可无,最多1次

         空字符可有可无,多了数量不限

           第一位:一定是1

           第二位:从3,5,7,8选一个

         其余9位:必须是9位数字

        (\+86|0086)?\s*1[3578]\d{9}

+ * ?在正则中是量词,有特殊含义,要是字符串中需要的话要用转义字符,所以用”\+”

|代表或的意思,()?代表()中内容可有可无,最多1次,\s*代表空格符可有可无,数量不限

 

5、常用

 

转义符\

将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。常见需要转义的:* + ?^  $  {}  []  ()  /

x|y

匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。

[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

定位符^

匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置

定位符$

匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。

6、创建正则表达式2种:

  ①var reg=/正则表达式/ig; (常用)

   何时使用:正则表达式在运行时不会改变

  ②var reg=new RegExp("正则表达式","ig");

   何时使用:在运行时正则表达式可能被改变时

 7、RegExp API

    ①格式验证

    test():验证字符串的格式是否符合正则表达式的要求,要求从头到尾必须完整匹配!

       var bool=reg.test(str)                         

      问题:test方法默认只要部分匹配即可!

      解决:都要在正则表达式前加^,后加$, ^和$联用表示从头到尾必须完整匹配

   ②查找:即能查找内容,又能查找位置

      var arr=reg.exec(str):在str中查找所有符合reg规定的关键字,存到数组arr中

      正则表达式末尾要加g,表全部,例如/^\d{6,10}$/g

       其中:arr[0]:保存了当前关键字的内容

            arr.index:保存了当前关键字的位置

            reg.lastIndex:保存下次开始查找的位置

     例:var str="我喜欢玩游戏,喜欢看小说,喜欢玩轮滑"

         var reg=/喜欢/g;

      var arr;

    while((arr=reg.exec(str))!=null){

     console.log("在位置"+arr.index+"发现关键字"+arr[0]);

    console.log("下次从"+reg.lastIndex+"开始找");}

     例:var str="纪委负责对纪检督察工作";

    var reg=/纪[检委](督察)?/;

    var count=0;

    var arr=null;

    while((arr=reg.exec(str))!=null){

    str=str.replace(reg,arr[0].length==2?"**":"****");

    count++;

     }

    console.log(str);

    console.log(count);

//输出:**负责对****工作   2

8、总结:查找关键字方法比较

   ① var i=str.search(reg)     -->只能判断有没有  

缺点:不能指定开始位置(从头到尾),不能返回位置  

    ② var arr=str.match(reg)   -->获得所有关键字内容,个数

  缺点:不能指定开始位置(从头到尾),不能返回位置   

    ③ var i=str.indexOf("kword"[,starti]) -->从指定位置开始,查找下一个关键字的位置

      缺点:不支持正则

    ④ var arr=reg.exec(str)-->支持正则,即获得内容,又获得位置

9、 正则表达式的贪婪模式与懒惰模式

     默认贪婪模式:默认总是匹配最长的符合条件的字符串

       原因:.*或.+等引起

     懒惰模式:仅匹配最短的符合条件的字符串

       贪婪-->懒惰:在可能出现贪婪的地方加上   (.*?)

10、从正则表达式匹配结果中获取子内容:3步

①切割字符串,选择有用的数据(slice)

②用正则表达式中的()括要获取子内容的部分并进行分组

③将正则替换成目标效果(replace)

    取*本次*匹配结果中第n个()匹配的子内容(正则中n从1开始),第一组为$1   第二组为$2

 例,身份证:

var pid="920182190404057213";

var birth=pid.slice(6,-4);

var reg=/(\d{4})(\d{2})(\d{2})/;

birth=birth.replace(reg,"$1年$2月$3日");

console.log(birth);

//输出: 1904年04月05日

猜你喜欢

转载自blog.csdn.net/shilipeng666/article/details/84109845