日期:2014-05-16 浏览次数:20437 次
一直以来知到正则表达式很强大,想狠下心来学一学,前段时间为此买了本《精通正则表达式》,花了不少大洋。买回来看了不到200页,太浮躁了,看不进去啊,书是好书,就这样一直放着。
看JQuery源码也不少时间了,可对那几个正则表达式不是很理解,就今天,太好了,找了一篇文章,终于有种醍醐灌顶的感觉。好东西不敢独享,呵呵,下面是把那文章稍作整理,稍后再分析JQuery里面的正则表达式,以作复习。
原文地址:http://www.cainiao8.com/web/js_note/js_regular_expression.html
?
1.
c{n} ?? ? ? ?//?/c{1}/只能匹配一个c。
c{n,m} ? ? // c{3,4}的意思是,连续的3个c或者4个c
c{n,} ? ? ? ?//?c{1,}表示1个以上的c
?
2.
*,+,?
*表示0次或者多次,等同于{0,},即
c* 和 c{0,} 是一个意思。
+表示一次或者多次,等同于{1,},即
c+ 和 c{1,} 是一个意思。
最后,?表示0次或者1次,等同于{0,1},即
c? 和 c{0,1} 是一个意思。
?
3.贪心与非贪心
?
{n,}?, *?, +?, ??, {m,n}?
?
{n,}? ?非贪心模式
?
4.^表示只匹配字符串的开头,$则只匹配字符串结尾的字符
?
5.‘.’会匹配字符串中除了换行符\n之外的所有字符
?
6.?b|c表示,匹配b或者c
?
7. ()?表达式内括号里写的内容会被认为是子正则表达式,所匹配的结果也会被记录下来供后面使用
8.?[abc]表示a或者b或者c中的任意一个字符
?
9. 反字符集合[^abc]
10.?\b表示的边界的意思,也就是说,只有字符串的开头和结尾才算数,与\b对应\B表示非边界
?
11. ?\d表示数字的意思,相反,\D表示非数字。
?
12. 空白
?
\f匹配换页符,\n匹配换行符,\r匹配回车,\t匹配制表符,\v匹配垂直制表符。
\s匹配单个空格,等同于[\f\n\r\t\v]。
?
?
13.?\w表示单词字符,等同于字符集合[a-zA-Z0-9_]。
?
14. 反向引用 :?形式如下:/(子正则表达式)\1/
?
15. 不记录子正则表达式的匹配结果 :?使用形如(?:pattern)的正则就可以避免保存括号内的匹配结果
?
16. ?所谓正向预查,意思就是:要匹配的字符串,后面必须紧跟着pattern ? 。?形式:(?=pattern)
17. ?形式(?!pattern)和?=恰好相反,要求字符串的后面不能紧跟着某个pattern
?
18. ?我们之前用过*,+,?之类的符号,它们在正则表达式中都有一定的特殊含义,类似这些有特殊功能的字符都叫做元字符;要匹配其他元字符,只要在前面加上一个“\”就可以了。
?
19. 正则表达式修饰 :?形式:/pattern/g ? ? ?
g 全局 ?
m m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾 ?
?i 不区分大小写
?
?
20.exect()方法:
?
exec方法返回的其实并不是匹配结果字符串,而是一个对象
?
21. test() 方法:
?
test方法仅仅检查是否能够匹配str,并且返回布尔值以表示是否成功
?
22. macth() 方法:
?
形式:str.match(reg);
与正则表达式的exec方法类似,该方法同样返回一个类似数组的对象,也有input和index属性。
设置了g修饰符的正则表达式在完成一次成功匹配后不会停止,而是继续找到所有可以匹配到的字符。返回的结果包括了三个b。不过没有提供input和index这些信息
?
?
23. replace()方法
?
形式:str. replace (reg,’new str’);
它的作用是将str字符串中匹配reg的部分用’’new str”部分代码,值得注意的是原字符串并不会被修改,而是作为返回值被返回
?
?
就像在正则里我们可以使用\1来引用第一个子正则表达式所匹配的内容一样,我们在replace函数的替换字符里也可以使用$1来引用相同的内容
?
24.?search方法和split方法
?
形式如下:str.search(reg);
search返回正则表达式第一次匹配的位置
?
?
?
?
?
?
?
?
?