MDN原文
ECMAScript通过RegExp来支持正则表达式
// pattern部分可以是简单或者复杂的正则表达式,可以包含字符串,限定符,分组,向前查询以及反向引用
// flag用以标明正则表达式的行为
var expression = / pattern / flag;
flag | 含义 |
---|---|
g | 表明全局模式,这样pattern不会在发现第一个匹配项的时候自己停止 |
i | 表明不区分大小写 |
m | 表示多行,即在到达一行文本的末尾时还会继续查找下一行中是否存在匹配项 |
==字符\在字符串中通常被转义为 \\,因此在正则表达式中会变成\\\\==
var pattern1 = /\.at/g;
var pattern2 = new RegExp('\\.at', 'g')
//pattern1是完全等价的正则表达式
使用正则表达式和使用RegExp构造函数创建的正则表达式不一样,在ECMAScript3中,正则表达式字面量始终会共享同一个RegExp示例,而使用RegExp构造函数创建的每一个新RegExp都是一个新实例
在ECMAScript5中已修正,字面量形式的正则都是一个独立的实例
let pattern1;
for (var i = 0; i < 10; i++) {
pattern1 = /cat/g
pattern1.test('catasfwe')
}
let pattern2;
for (var i = 0; i < 10; i++) {
pattern2 = new RegExp('cat', 'g')
pattern2.test('catasfwe')
}
regexp实例属性
- global: 是否设置了g标记,boolean
- ingoreCase: 是否设置了i标记,boolean
- lastIndex: 在源字符串中下一次开始搜索的位置,number
- multiline: 是否设置了m标记,boolean
- source: 正则表达式的字面量字符串,不包含开头,结尾的斜杆
regexp实例方法
- exec()
exec重要配合捕获组使用,只传入一个参数,就是要匹配的字符串,如果匹配到了,就返回第一个匹配信息的数组,没有匹配到就返回null。虽然返回的是一个数组,但是包含两个属性(index,input)。index表示字符串中匹配模式的起始位置,input表示输入的字符串
let str = 'mom and dad and baby';
let reg = /mom (and dad (and baby)?)?/gi;
let result = reg.exec(str)
console.log(result.index); // 0
console.log(result.input); // mom and dad and baby
console.log(result[0]); // mom and dad and baby
console.log(result[1]); // and dad and baby
console.log(result[2]); // and baby
- test()
test只返回一个boolean,表示是否匹配到了