全局搜索
JavaScript的正则表达式还有几个特殊的标志,最常用的是 g ,表示全局匹配:
var r1 = testg;
// 等价于:
var r2 = new RegExp('test', 'g');
全局匹配可以多次执行 exec() 方法来搜索一个匹配的字符串。当我们指定 g 标志后,每次运行 exec() ,正则表达式本身会更新 lastIndex 属性,表示上次匹配到的最后索引:
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastIndex; // 10
re.exec(s); // ['VBScript']
re.lastIndex; // 20
re.exec(s); // ['JScript']
re.lastIndex; // 29
re.exec(s); // ['ECMAScript']
re.lastIndex; // 44
re.exec(s); // null,直到结束仍没有匹配到
全局匹配类似搜索,因此不能使用 ^…$ ,那样只会最多匹配一次。
正则表达式还可以指定 i 标志,表示忽略大小写, m 标志,表示执行多行匹配。