正则表达式的创建
- 字面量形式:
var re = /abc/; var re2 = /abc/i; var re3 = /abc/g;
- RegExp构造函数:
new RegExp('abc'); new RegExp(/abc/); new RegExp(/abc/, 'gi');
正则表达式属性
var re = /a|b/ig; // i: ignoreCase, g: global, m: multiline
var str = 'ab';
re.lastIndex; // 0, 仅在g模式下起作用,否则为0
re.ignoreCase; // true
re.global; // true
re.multiline; // false
re.source; // 'a|b' , source表示模式文本
re.exec(str); // ["a", index: 0, input: "ab", groups: undefined]
re.lastIndex; // 1
re.exec(str); // ["b", index: 1, input: "ab", groups: undefined]
re.exec(str); // null
re.lastIndex; // 0;
var re = /a|b/ig;
re.lastIndex; // 0
str.match(re); // ["a", "b"]
re.lastIndex; // 0
特殊字符及含义
字符 | 含义 |
---|---|
\ | 通常用作转义特殊字符,自身也是转义字符 |
^ | 匹配输入的开始 |
$ | 匹配输入的结束 |
* | 匹配前一个表达式零次或多次 |
+ | 匹配前一个表达式一次或多次 |
? | 匹配前一个表达式零次或一次,等价于{0, 1} 正则表达式默认是贪婪匹配,即尽可能多的匹配字符;如果在量词*、+或?后紧跟一个?,就表示是非贪婪匹配 |
. | 匹配除换行符外的任意字符 |
(x) | 这里的括号称为捕获括号,内容称之为捕获组,在模式中可以使用\a表示第a个捕获组;在正则表达式替换中使用$a表示第a个捕获组; |
(?:x) | 与上边相反, 这是一个非捕获组,常用于将操作符用于子表达式而不仅仅是某个字符; /foo{1, 2}/匹配最后一个字符‘o’1或2次;/(?:foo){1, 2}/匹配字符串‘foo’1或2次 |
x(?=y) | 先行断言;匹配后边跟着y的所有x |
(?<=y)x | 后行断言;匹配前边字符是y的所有x |
x(?!y) | 正向否定断言;匹配后边不是y的所有x;如/star(?!t)/匹配star不匹配start |
x | y |
{n} | 匹配前一个字符n次 |
{n, m} | 匹配前一个字符n至m次 |
[abc] | 一个字符集合,表示匹配括号中的任意字符 |
[^abc] | 一个反向字符集合,表示匹配任意不在该集合的字符 |
\d | 匹配一个数字 |
\D | 匹配一个非数字 |
\s | 匹配一个空白字符,包括空格、换行符、制表符、换页符 |
\w | 匹配一个单字字符(字母、数字、下划线),等价于[0-9A-Za-Z] |
正则表达式相关的方法
参考文献: