替换所有其他数字

时间:2019-03-03 16:20:30

标签: regex

这是测验练习

如果其他所有字符都是\ d,请用*替换(仅那些位于偶数位置的字符:2、4、6等)。示例:a1b2cde3~g45hi6应该变成a*b*cde*~g4*hi6

我尝试了代码

(?<=.)(\d)

替换

*

结果

  

测试3/10:请记住仅替换字符串偶数位置的所有数字。

正则表达式demo

2 个答案:

答案 0 :(得分:2)

您可以使用

\G((?:.\D)*.)\d

请参见regex demo。如果输入字符串可能包含换行符,请通过使用正则表达式引擎的相应选项来确保.与任何字符匹配。

详细信息

  • \G-字符串的开头或上一个匹配项的结尾
  • ((?:.\D)*.)-第1组:
    • (?:.\D)*-与任何字符和任何非数字字符的0个或多个重复匹配的非捕获组
    • .-任意1个字符
  • \d-一个数字。

与此类似的JS正则表达式(符合ES6)

/((?:.\D)*.)\d/gy

请参见this regex demoy标志与g标志一起可以达到与在前一个正则表达式中使用\G运算符相同的效果。

简短演示:

var s = "a1b2cde3~g45hi6";
var rx = /((?:.\D)*.)\d/gy;
console.log(s.replace(rx, "$1*"));

答案 1 :(得分:0)

@WiktorStribiżew已经给出了一个很好的答案。但是,如果您使用的是少数几个支持可变宽度后向模式的正则表达式引擎之一,则还可以使用:

(?<=^(?:..)*.)\d

演示:https://regex101.com/r/QAHt6E/3