javascript - 如何只匹配那些前面有偶数个 `%` 的数字?

标签 javascript c++ regex std ecmascript-2016

我想捕捉出现在字符串中任意位置的数字,并将它们替换为“(.+)”。

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

我想不出一个 ECMAscript 正则表达式。

这是 Playground :

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

abcd%12%%34%%%666%%%%11efgh

一个成功的捕获将表现如下:
desired behaviour


我尝试过的事情:

attempt 1

attempt 2

attempt 3


如果您已经意识到,第三次尝试就差不多成功了。唯一的问题是在 Playground 的第二行。 其实我想表达的是:

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

  • 上面的整个表达式前面没有 [缺少(未使用或其他)字符]。
  • 上面的整个表达式前面有一个不是%的字符。

有没有办法匹配字符的缺失
这就是我在第三次尝试中使用 \0 尝试做的事情。

最佳答案

您可以使用 (?:[^%\d]|^|\b(?=%))(?:%%)*(\d+) 作为模式,您的number 存储在第一个捕获组中。这也处理以零个 % 字符开头的数字。

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

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

您可以在实际中看到它 here

关于javascript - 如何只匹配那些前面有偶数个 `%` 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291499/

相关文章:

javascript - 如何让动态控制的窗体显示在下一行?

c++ - constexpr 函数中的复合赋值 : gcc vs. clang

c++ - GCC 下的 2 字节 (UCS-2) 宽字符串

java - Clojure 的正则表达式解析/编译有多智能?

javascript - 使用正则表达式循环并替换

ruby - 多行 RegEx : match last occurrence only

javascript - Function 和 new Function 的区别

javascript - 刷新页面并更改 URL 的 ID

C++ char * const vs char *,为什么有时一个有时另一个

javascript - HTTP 状态 404 打开 HTML 页面时请求的资源不可用