[ 正则 ]正则表达式进阶!
关于正则表达式,网上百度能百度出一大堆。 这里记录个人最近所悟,之前一直以为,正则表达式,难如上青天,各种符号互相参杂,完全看不懂。 或许有句话说得对,当你不懂的时候,就该多读书。 以下算了正则表达式的读书笔记吧:
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 。 如果需要匹配一切的字符, 那么最好采用[Ww],[Ss]...之类的形式。
8 关于[W] 这个匹配字符,其实它也可以用来匹配 下划线。
9 关于 reg.exec() 方法存在的lastIndex 属性的注意点。 在这里首先要说明,正则表达式的匹配方式是用字符串去匹配正则,而不是用正则匹配字符串([精通正则表达式])。 注意以下几点: 1 只有当使用exec方法时,且必须是使用全局匹配时,也就是最后必须带有一个g的属性,才会有lastIndex属性。, lastIndex从字面上来讲就是最后一个索引,实际上它的意思是正则表达式开始下一次查找的索引位置,第一次的时候总是为0的, 第一次查找完了的时候会把lastIndex的值设为匹配到得字符串的最后一个字符的索引位置加1,第二次查找的时候会从lastIndex这个位置开始,后面的以此类推。
关于正则的总结就到此为止。 很久没有更新博客了,不小心,都快有10w的访问量了,觉得这个东西还是要经常记录,才不至于会忘记。 谨防忘记,以记录之。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |