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] 退格直接量