我想捕捉出现在字符串中任意位置的数字,并将它们替换为“(.+)”。
但我只想捕获那些前面有偶数个 %
的数字。如果周围的字符被捕获,不用担心:我们可以使用捕获组来过滤掉数字。
我想不出一个 ECMAscript 正则表达式。
这是 Playground :
abcd %1 %%2 %%%3 %%%%4 efgh
abcd%12%%34%%%666%%%%11efgh
我尝试过的事情:
如果您已经意识到,第三次尝试就差不多成功了。唯一的问题是在 Playground 的第二行。 其实我想表达的是:
匹配一个数字,如果它前面有偶数个 %
并且满足以下任一条件:
- 上面的整个表达式前面没有无 [缺少(未使用或其他)字符]。
- 上面的整个表达式前面有一个不是
%
的字符。
有没有办法匹配字符的缺失?
这就是我在第三次尝试中使用 \0
尝试做的事情。
最佳答案
您可以使用 (?:[^%\d]|^|\b(?=%))(?:%%)*(\d+)
作为模式,您的number 存储在第一个捕获组中。这也处理以零个 % 字符开头的数字。
这将匹配偶数个 % 符号,如果它们前面有:
- 既不是 % 也不是数字(因此我们不需要捕获 % 之前的最后一个数字,因为这不适用于像
%%1%%2
这样的链) - 字符串的开始
- 用于上述链的单词边界(因此任何单词字符)
您可以在实际中看到它 here
关于javascript - 如何只匹配那些前面有偶数个 `%` 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291499/