Javascript正则式

转载自 Life is Hard

JS中正规表达式有两种 ** 声明方式
1. 构造函数:var re = new RegExp('JavaScript', 'i')
其中i是正则式的模式标志,共有3个,i表示不区分大小写,g表示全局匹配,m表示多行匹配
2.直接量语法,包含在一对/中间,如 var re = /JavaScript/i

###有特殊意义的字符
^ $ . * + ? = ! : | / / () [] {}
尽管有些字符只在某些特殊的环境中才会有特殊意义,不过把它们当作直接量字符使用时最好用转义符\

###字符类
将单独的直接量放进方括号里就可以组合成字符类,一个字符类和它所包含的任意一个字符相匹配,如/[ab]/与a或b匹配,/[^ab]/与除ab外的任意字符匹配,
/[a-z]/与所有小写字母匹配,
有一个小tip需要注意,/b在JS的正则式中是用来匹配单字的边界的,所以要匹配退格符时需要写成/[/b]/

###重复
*表式重复0到多次,+表示重复1到多次,?表示重复0到1次
{n}表示重复n次,{n,m}表示n到m次,{n,}表示至少n次
需要注意的是,这种重复匹配是贪婪的
在JS1.5之后支持非贪婪的匹配,做法是在后面加一个问号,如*?+?

###选择、分组、引用

  • |号用来进行选择,如/ab|cd/与ab或cd匹配,它的工作方式相当于逻辑或,如果|号前面的匹配已经成功就忽略后面的匹配,如用/a|ab/对ab进行匹配操
    作时,它只匹配第一个字符a
  • () 将括号中的字符合为一组,称为一个子表达式,可以用/后接一个数字进行引用(/1
    引用第一个带括号的子表达式),由于子表达式可以嵌套,所以用左括号出现的顺序来代表子表达式的引用顺序。如匹配一对引号可以用/('")[^'"]*/1/
    JS1.5中有一种改进的括号方式(?:xxx),它只有分组的效果,而不会产生引用,/(ab)(?:cde)(fg)/2//2对应着(fg)

###指定匹配的位置(即锚元素的使用)
^ 字符串的开头,$ 字符串的结尾,/b 为单字的边界, /B 为非单字边界
在JS1.5中,(?=xxx)可以指定一个前向的锚定条件,即字符需要匹配该条件,(?!xxx)指定一个反向的锚定条件,即字符不匹配该条件
//bJava/b/匹配一个单字Java,它不会匹配JavaScript

###一些转义字符
.  (点号)匹配任意字符
/w  相当于[a-zA-Z0-9_]
/W  相当于[^a-zA-Z0-9_]
/s  任何unicode空白符
/S  任何非unicode空白符
/d  相当于[0-9]
/D  相当于[^0-9]
[/b] 退格直接量