Tri*_*daz 25 javascript regex v8 node.js
我跑的时候
/(a)/g.exec('a a a ').length
Run Code Online (Sandbox Code Playgroud)
我明白了
2
Run Code Online (Sandbox Code Playgroud)
但我认为它应该回归
3
Run Code Online (Sandbox Code Playgroud)
因为a字符串中有3个,而不是2个!
这是为什么?
我希望能够在RegEx中搜索字符串的所有出现并迭代它们.
FWIW:我正在使用node.js
mVC*_*Chr 26
你可以match改用:
'a a a'.match(/(a)/g).length // outputs: 3
Run Code Online (Sandbox Code Playgroud)
你只匹配第一个a.长度为2的原因是它找到第一个匹配和第一个匹配的括号组部分.在你的情况下,他们是相同的.
考虑这个例子.
var a = /b(a)/g.exec('ba ba ba ');
alert(a);
Run Code Online (Sandbox Code Playgroud)
它输出ba, a.数组长度仍为2,但更明显的是发生了什么."ba"是全场比赛. a括号内的第一个分组匹配.
该MDN文档支持这一点-只有第一场比赛和含有组返回.要查找所有匹配项,您可以使用mVChr所述的match().
while循环可以帮助您
x = 'a a a a';
y = new RegExp(/a/g);
while(null != (z=y.exec(x))) {
console.log(z); // output: object
console.log(z[0]); // ouput: "a"
}
Run Code Online (Sandbox Code Playgroud)
如果添加计数器,则得到它的长度。
x = 'a a a a';
counter = 0;
y = new RegExp(/a/g);
while(null != (z=y.exec(x))) {
console.log(z); // output: object
console.log(z[0]); // output: "a"
counter++;
}
console.log(counter); // output: 4
Run Code Online (Sandbox Code Playgroud)
这是非常安全的,即使没有找到任何匹配项,它也会退出并且counter将为0
主要目的是告诉您如何使用RegExp循环并从相同匹配的RegExp的字符串中获取所有值
| 归档时间: |
|
| 查看次数: |
29886 次 |
| 最近记录: |