1.正则表达式的定义
描述字符模式的对象,JavaScript的RepExp类表示正则表达式
var pattern = new RegExp("s\("); <=> var pattern = /s\)/;
2.直接量字符
\o NUL字符
\t 制表符
\n 换行符
\v 垂直制表符
\f 换页符
\r 回车
3.字符类
[...] 方括号内的任意字符
[^...] 不在方括号内的任意字符
. 除换行符和其他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] 退格直接量
4.重复
{n,m} 匹配前一项至少n次,但不超过m次
{n,} 匹配前一项n次或者更多次
{n} 匹配前一项n次
? 匹配前一项0次或者1次,等价于{0,1}
-
匹配前一项至少1次或者更多次,等价于{1,}
-
匹配前一项0次或者更多次,等价于{0,}
example:
/\d{2,4}/ //匹配2~4个数字
/\w{3}\d?/ //匹配3个单词加一个可选数字
/\s+java\s+/ //匹配java单词前后至少一个空格
/[^(]*/ //匹配以一个或者多个左括号开始的字符
5.非贪婪
重复为尽可能的多匹配,非贪婪模式是尽可能的少匹配
??
+?
*?
example:
{1,5}? //尽可能的匹配一个
6.选择分组引用
| 选择,匹配的是该符号左边的子表达式或者右边的子表达式
(...) 组合,将几个项组合为一个单元,这个单元可通过* + ? | 等符号加以修饰,而且记住和这个组合相匹配的字符串以供此后的引用使用
(?:...) 只组合,把项组合到一个单元,但不记忆与改组相匹配的字符
\n 和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也可能是嵌套的),组索引是从左到右的左括号数,(?: 形式的分组不编码
7.锚字符
^ 匹配字符串的开头,在多行检索中匹配一行的开头
$ 匹配字符串的结尾,在多行检索中匹配一行的结尾
\b 匹配一个单词的边界,就是位于\w与\W之间的位置
\B 匹配非单词边界的位置
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
(?!=p) 零宽负向先行断言,要求接下来的字符都不与p匹配
8.修饰符
i 不区分大小写
g 全局匹配
m 多行匹配模式
9.用于模式匹配的String方法
search()
“javascript”.search(/script/i); 如果匹配则返回对应索引,否则返回-1
replace()
text.replace(/javascript/gi,"JavaScript"); 检索和替换
match()
"1 plus 2 equals 3".match(/\d+/g); 返回["1","2","3"]
split()
"1,2,3,4,5".split(/\s,\s/);返回["1","2","3","4","5"]
10.RegExp对象
RegExp第一个参数包含正则表达式的主体部分,也就是直接量中两条斜线之间的文本,不论是字符串直接量还是正则表达式都使用 \ 字符作为转义字符的前缀,
因此当给RegExp()传入一个字符串表述正则表达式时,必须将 \ 替换成 \
第二个参数是可选的,只能传 g i m,或者它们的组合
var zipcode = new RegExp("\d{5}","g");
RegExp属性
source:是一个只读字符串,包含正则表达式的文本
global:是一个只读的布尔值,用以说明这个正则表达式是否带有修饰符g
ignoreCase:是一个只读的布尔值,用以说明正则表达式是否带有修饰符i
multiline:是一个只读的布尔值,用以说明正则表达式是否带有修饰符m
lastIndex:是一个可读/写的整数,如果匹配模式带有g修饰符,这个属性存储在整个字符串的下一次检索的开始位置,会被exec(),test()方法用到
RegExp方法
exec()
执行字符串的匹配检索,类似String.match(),都会返回一个数组
test()
当调用exec方法返回不为null则调用test方法返回为true