一、字符
字符 | 解释 |
---|
. | 除换行符以外的任意一个字符 |
\w | 字母、数字、下划线等一个字符 |
\s | 一个空白符 |
\d | 一个数字 |
\b | 词的边界,开始或结束 |
^ | 输入的开始,多行模式下也匹配换行符后紧跟的位置 |
$ | 输入的结束,多行模式下也匹配换行符前的位置 |
字符 | 说明 |
---|
\W | 不匹配字母、数字、、下划线 |
\S | 不匹配空白符 |
\D | 不匹配数字 |
\B | 不匹配词的边界 |
[^XYZ] | 除XYZ的任何字符 |
字符 | 说明 |
---|
\ | 转义特殊字符 |
| | 或,满足多个条件中的其中一个,短路运算 |
二、重复限定符
限定符 | 说明 |
---|
* | 匹配前一个表达式0次或多次 |
+ | 匹配前一个表达式1次或多次 |
? | 匹配前一个表达式0次或1次 |
{n} | 匹配前一个表达式n次 |
{n,} | 匹配前一个表达式至少n次 |
{n,m} | 匹配前一个表达式至少n次,至多m次 |
三、贪婪与非贪婪
- 贪婪(常规默认)
- 重复限定符修饰下尽可能多的匹配,例如?尽可能匹配1次
- 非贪婪
四、分组、捕获、反向引用
- 用()将多个字符形成一组进行匹配
- 捕获组
按括号内部的模式进行匹配,匹配后将结果保存在内存中,结果按以下两种方式进行区分:
- 按数字编号捕获
- (exp)
- 结果中编号0为满足条件的字符串
- 结果中编号1为捕获的第一组
- 按命名编号捕获
- 非捕获
- 反向引用
var str='aabbfcgw';
var pattern=/(\w)\1/g;
while(pattern.test(str)){
alert(RegExp.lastMatch);
}
五、区间
- [xyz] 多个字符中的一个满足条件
- [0-9] 破折号表示范围
- . 和 * 在[ ]中没有特殊意义,只表示点、星号
六、零宽断言
名称 | 符号 | 说明 |
---|
正向先行断言 | x ( ? = y ) | 匹配前面的内容,即x,仅仅当x后面跟着y |
正向后行断言 | ( ? <= y ) x | 匹配后面的内容,即x,仅仅当x前面是y |
负向先行断言 | x ( ? ! y ) | 匹配x仅仅当x后面不是y |
负向后行断言 | ( ? < ! y ) x | 匹配x仅仅当x前面不是y |
var str='aacbgbfw';
var pattern=/(?<=g)b/;
alert(pattern.exec(str).index);