这里记录个人最近所悟,之前一直以为,正则表达式,难如上青天,各种符号互相参杂,完全看不懂。
或许有句话说得对,当你不懂的时候,就该多读书。
以下算了正则表达式的读书笔记吧:
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的访问量了,觉得这个东西还是要经常记录,才不至于会忘记。
谨防忘记,以记录之。