首页 > 其他 > 详细

正则表达式进阶!

时间:2015-03-25 23:40:09      阅读:366      评论:0      收藏:0      [点我收藏+]

关于正则表达式,网上百度能百度出一大堆。

这里记录个人最近所悟,之前一直以为,正则表达式,难如上青天,各种符号互相参杂,完全看不懂。

或许有句话说得对,当你不懂的时候,就该多读书。

以下算了正则表达式的读书笔记吧:


1 对于 ^ 元字符,一情况下,表示行首锚点。在以下两种情况下则具有特殊意义:

1) 出现在的字符数组 [ ] 中,切不是第一个靠近[ 的字符,则为普通字符 ^.

2)  出现在字符数组[] 中,且为靠近左边框 [ 第一个 字符,则表示逻辑非 。

2 对于字符数组 [ ] ,只表示从该字符数组范围中匹配一个字符。

3 对于连字符号 - (也叫中杠),当出现在字符数组中,若靠近左边框,则为普通字符,否则为连接符,用来连接范围。

4 对于捕捉匹配与非捕捉匹配.。在jquery的源码中,你可以看到到处的非捕捉匹配。那么原因何在。

这是因为,非捕捉匹配相对捕捉匹配的效率要高得多。根据常识,也可以推测出来。

5 那么对于捕捉匹配的用处何在呢? 正则表达式会根据分组情况,对相应的子表达式,进行记录,保存相应的子表达式。

在javascript中可用 \s1,\s2.... 表示。在使用reg.exec(str) 时,相应的子表达式的值,也会被记录在结果数组中。

当你需要对一个字符串进行匹配,且对其子表达式的值进行分析时,那么合理的使用捕捉与非捕捉是个不错的选择。


6 关于正则表达式的转义字符是一个难点。

这里需要注意的是,在绝大多数的程序语言中,表示一个 \ 是必须用双\\ 来表示的,这是也由于字符串的引号问题引起。

因为如果你用如下的代码进行定义,会直接给出错误:

var str = "\";
这样程序会认为是给第二个双引号进行转移。那么你只能采用如下代码:

var str = "\\";


那么现在问题来了,当你需要去匹配一个\ 的时候,该如何去做呢?可以有两种方式:

var reg1 = /\\/g;
var reg2Str =  "\\\\";
var reg2 = new RegExp(reg2Str,"g");

 以上两种方式皆可以。 为何下面是四个反斜杠,同样也是由于字符串的解析引起。

7 关于 点( . ) 这个元字符的一些小问题。很多人都认为它是可以有来匹配一切字符的。

其实不然,这个 . 是不能匹配 换行和回车的。也就是 \n 与\r 。 如果需要匹配一切的字符,

那么最好采用[\W\w] ,[\S\s]...之类的形式。


8 关于[\W] 这个匹配字符,其实它也可以用来匹配 下划线。


9 关于 reg.exec() 方法存在的lastIndex 属性的注意点。

在这里首先要说明,正则表达式的匹配方式是用字符串去匹配正则,而不是用正则匹配字符串([精通正则表达式])。

注意以下几点:

1 只有当使用exec方法时,且必须是使用全局匹配时,也就是最后必须带有一个g的属性,才会有lastIndex属性。,

lastIndex从字面上来讲就是最后一个索引,实际上它的意思是正则表达式开始下一次查找的索引位置,第一次的时候总是为0的,

第一次查找完了的时候会把lastIndex的值设为匹配到得字符串的最后一个字符的索引位置加1,第二次查找的时候会从lastIndex这个位置开始,后面的以此类推。


关于正则的总结就到此为止。

很久没有更新博客了,不小心,都快有10w的访问量了,觉得这个东西还是要经常记录,才不至于会忘记。

谨防忘记,以记录之。

正则表达式进阶!

原文:http://blog.csdn.net/yangzhihello/article/details/44628423

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!