【问题标题】:JavaScript regex global flag doesn't return all occurences [duplicate]JavaScript正则表达式全局标志不会返回所有出现[重复]
【发布时间】:2018-05-23 18:06:26
【问题描述】:

我有一个十进制的二进制表示:

1000010001

我想匹配两端被一包围的连续零序列10001

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

100001
10001

但由于某种原因,matchg 只返回第一个:

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

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

【问题讨论】:

  • 第一个匹配“消耗”第二个1 数字。如果您在循环中进行匹配,则可以在每次匹配后将正则表达式备份 1。
  • 在某处有一个骗局。我正在搜索....底线是:当100001 匹配时,字符串中剩下的是0001,因此在其余部分应用正则表达式将不匹配。

标签: javascript regex


【解决方案1】:

匹配消耗字符,所以在第一次匹配之后,字符串变为0001,因此不再匹配模式;您可以将模式中的第二个 1 转换为不消耗字符的 look ahead 断言,然后稍后将 1 添加到每个匹配项:

var s = '1000010001';

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

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多