JavaScript正则表达式全局标志不会返回所有出现的内容

时间:2017-12-09 19:20:13

标签: javascript regex

我有一个小数的二进制表示法:

1000010001

我希望匹配由两端的10001包围的连续零序列。

所以在我的字符串中有两个这样的事件:

100001
10001

但出于某些原因,match g仅返回第一个:

'1000010001'.match(/(?:10+1)+/ig)
> ["100001"]

为什么不两者兼而有之?如何让它返回所有事件?

1 个答案:

答案 0 :(得分:2)

匹配消耗字符,因此在第一次匹配后,字符串变为0001,因此不再匹配模式;您可以将模式中的第二个1转换为预测断言(不消耗字符),然后在每个匹配后添加1

var s = '1000010001';

console.log(
  s.match(/10+(?=1)/g).map(x => x + '1')
)