如何只匹配那些在它们前面有偶数个`%`的数字?

Ane*_*777 6 javascript c++ regex std ecmascript-7

我想捕捉出现在字符串中任何位置的数字,并用"(.+)"替换它们.

但我想只抓住那些在%它们前面有偶数个数字的数字.如果有任何周围的字符被抓住,不用担心:我们可以使用捕获组来过滤掉这些数字.

我无法想出一个ECMAscript正则表达式.

这是游乐场:

abcd %1 %%2 %%%3 %%%%4 efgh

abcd%12%%34%%%666%%%%11efgh
Run Code Online (Sandbox Code Playgroud)

成功的捕获将表现如下:
期望的行为


我尝试过的事情:

尝试1

尝试2

尝试3


如果你意识到,第三次尝试几乎正在发挥作用.唯一的问题是在操场的第二行.实际上,我想在那个表达中说的是:

匹配一个数字,如果它前面有偶数个%s AND,则满足以下任一条件:

  • 上面的整个表达之前没有任何 [没有(未消耗或其他)字符].
  • 上面的整个表达式前面是一个字符以外的字符%.

有没有办法匹配缺少一个角色?
这就是我\0在第三次尝试中尝试做的事情.

Seb*_*ske 2

您可以用作(?:[^%\d]|^|\b(?=%))(?:%%)*(\d+)模式,将您的号码存储到第一个捕获组中。这也处理前面带有零%字符的数字。

这将匹配偶数个 % 符号,如果它们前面有:

  • 既不是 % 也不是数字(所以我们不需要捕获 % 之前的最后一个数字,因为这不适用于像这样的链%%1%%2
  • 字符串的开头
  • 对于上面提到的链,单词边界(因此任何单词字符)

你可以在这里看到它的实际效果