加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

JavaScript RegExp 基础详谈

发布时间:2016-10-30 10:43:27 所属栏目:教程 来源:站长网
导读:副标题#e# 前言: 正则对于一个码农来说是最基础的了,而且在博客园中,发表关于讲解正则表达式的技术文章,更是数不胜数,各有各的优点,但是就是这种很基础的东西,如果我们不去真正仔细研究、学习、掌握,而是抱着需要的时候,就去网上找现成的正则表达

      test 方法用于测试正则规则在指定的字符串中是否具有符合的匹配结果,如果匹配到则返回true,否则返回false。
      示例:

var pattern = /a/;
console.log(pattern.test('edcba')) // => true

      当test方法在全局模式下被多次执行的时候,每次执行的返回值会因为匹配结果的不同而不同,但在实际的应用中,
      我只需要进行一次匹配即可。

    · exec()

      在非全局的匹配模式下,一旦匹配到符合规则的结果,便会停止执行。
      在全局模式下,当匹配到符合规则的结果也会停止执行,但是若多次重复执行test方法,则会根据lastIndex属性的值为锚点依次向后匹配,
      在匹配到字符串的末尾后,会从头到尾再重新循环匹配。

      示例:

1 var pattern = /a/g;
2     console.log(pattern.test('edcba')) // => true 第一次执行。
3     console.log(pattern.test('edcba')) // => false 第二次执行。
4     console.log(pattern.test('edcba')) // => true 第三次执行。从头到尾重新循环执行。   

      exec方法可以返回匹配的结果,以及结果在字符串中的索引和下一次匹配的起始位置。如果正则表达式没有匹配到结果,
      那么返回的值就是 null。
      exec方法在匹配到的情况下,返回的是一个数组,数组的格式如下:

1 var result = /a/.exec('abcdaefga');
2     result[0] // -> 当前匹配到的结果。
3     result.input // -> 进行匹配操作的字符串。
4     result.index // -> 当前匹配结果首字母在字符串中的索引

      如果存在分组匹配的情况下:
        result[1] -> 表示第一个分组匹配到的结果。
        result[2] -> 表示第二个分组匹配到的结果。
        ...
        result[n] -> 表示第n个分组匹配到的结果。

      示例:

1 var str = '2012 google';
2 var pattern = /(d{4})s(w+)/;
3 var result = pattern.exec(str);
4 console.log(result[0]);
5 console.log(result[1]);
6 console.log(result[2]);     

      如果想使用exec方法对字符串中的某个结果进行全面匹配,那么正则表达式必须要开启全局模式。在非全局的模式下,
      exec方法一旦匹配到结果,便会停止执行。

      示例:

1 var pattern = /a/g;
2 while(result = pattern.exec('abababab')){
3     console.log(result+'index:'+ result.index +' input:'+ result.input);
4 }

    · compile()

      compile可以重新指定正则实例的规则与修饰符。
      示例:

var pattern = /res/i;
pattern.compile('rp','g') -> /rp/g

  2.4 RegExp对象的属性

    · 静态属性

      静态属性是RegExp这个内置对象的固有属性。访问这些静态属性,不需要进行声明实例化,而是直接调用。
      调用格式:RegExp.attribute
      下面所有属性的说明,就以:

var desc = 'Hello,everyone.My name is gtshen';
reg = /na(.?)/g;
reg.test(desc);

      这段代码测试为例,进行说明:

      - input
        功能:返回当前要匹配的字符串
        示例: console.log('input:'+RegExp.input) // -> 'Hello,everyone.My name is gtshen' 
        短名:RegExp.$_;
        注意:opera 低版本并不支持。

      - lastMatch
        功能:最后一次匹配到的子串结果,需要开启修饰符-g。
        示例: console.log('lastMatch:'+RegExp.lastMatch) // -> nam 
        短名:RegExp['$&'];
        注意:opera 低版本并不支持。

      - lastParen
        功能:最后一次分组中捕获到的内容。需要开启修饰符-g。
        示例: console.log('lastParen:'+RegExp.lastParen) // -> 'm'; 
        短名:RegExp['$+'];
        注意:opera 低版本并不支持。

      - leftContext
        功能:以当前匹配到的子串为上下文,返回之前的子串。
        示例: console.log('leftContext:'+RegExp.leftContext) // -> 'Hello,everyone.My '; 
        短名:RegExp['$&`'];

      - rightContext
        功能:以当前匹配到的子串为上下文,返回之后的子串。
        示例: console.log('rightContext:'+RegExp.rightContext) // -> 'e is gtshen'; 
        短名:RegExp['$''];

      - multiline
        功能:是否支持多行。返回值为boolean值,true表示支持,false表示不支持。
        示例: console.log('multiline:'+RegExp.multiline); 
        短名:RegExp['$*'];
        注意:IE 并不支持。

      - $1 - $9
        功能:返回1 - 9个分组的值。
        示例: console.log('$1:'+ RegExp.$1) // -> 'm' 

      * 注意的是“RegExp”指的是最近一次在程序运行中进行匹配操作的正则实例对象。

     · 实例属性

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读