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}
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