正则表达式(regular expression)是一个描述字符模式的对象。javascript的RegExp类表示正则表达式,string和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能。javascript的正则表达式,是perl5的正则表达式语法的大型子集。
javascript的正则表达式用RegExp表示,可以使用RegExp()构造函数来创建RegExp对象,不过RegExp对象更多是通过一种特殊的的直接量语法来创建。就像通过引号包裹字符的方式来定义字符串直接量一样,正则表达式直接量定义为包含在一对斜杠(/)之间的字符,例如
var pattern = /s$/;
运行这段代码创建一个新的RegExp对象,并将它赋值给pattern。用构造函数也可以定义与之等价的正则表达式
var pattern = RegExp("s$");
1. 字符类
{...} 表示方括号内的任意字符 {^...} 表示不在方括号内的任意字符 . 除换行符和其他Unicode行终止符之外的任意字符 \w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9] \W 任何不是ASCII字符组成的单词,等价于[a-zA-Z0-9] \s 任何Unicode空白符 \S 任何非Unicode空白符 \d 任何ASCII数字,等价于[0-9] \D 任何非ASCII数字,等价于[^0-9] [\b] 退格直接量
2. 重复
{n,m} 匹配前一项至少n次,但不能超过m次 {n,} 匹配前一项n次或更多次 {n} 精确匹配前一项n次 ? 匹配前一项0次或者1次,等价于{0,1} + 匹配前一项1次或更多次,等价于{1,} * 匹配前一项0次或更多次,等价于{0,}
3. 正则表达式的选择,分组和引用字符
| 选择,匹配的是该符号左边的子表达式或右边的子表达式 (...) 组合,将几项组合为一个单元,这个单元可以通过“*”,“+”,“?”,“|”等符号加以修饰,而且可以记住和这个组合相匹配的字符串以供以后的引用使用 (?:...) 只组合,把项组合到一个单元,但不记忆与该项相匹配的字符 \n 和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也有可能是潜嵌套的),组索引是从左到右的左括号数,“(?:”形式的分组不编码
4. 正则表达式中的锚字符
^ 匹配字符串的开头,在多行检索中,匹配一行的开头 $ 匹配字符串的结尾,在多行检索中,匹配一行的结尾 \b 匹配一个单词的边界 \B 匹配非单词的边界 (?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符 (?!p) 零宽负向先行断言,要求接下来的字符不与p匹配
5. 正则表达式的修饰符
i 执行不区分大小写的匹配
g 执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
m 多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结束和字符串的结束