JavaScript RegEx替换连续的字符串

时间:2016-01-19 07:18:36

标签: javascript regex string replace

我有一个看起来像这样的字符串

"+919357F%7F%7F%7F%00%00%00%29Your%20OTP%20for"

我需要将所有连续%7F替换为~

我用这个命令找到了一个近乎工作的解决方案

"+919357F%7F%7F%7F%00%00%00%29Your%20OTP%20for".replace(/[%7F]{2,}/g, '~');

但由于某种原因,它确实会消耗掉我需要保持原样的其他%标记。我也无法理解{2,}代表什么?我知道它是连续替换的原因,但不确定为什么2或3有什么不同?

1 个答案:

答案 0 :(得分:2)

使用[]捕获或非捕获组)替换RegEx中存在的()字符类)。在字符类中,所有字符都被视为单独的模式。因此,[fo]会匹配单个字符fo,而不匹配fo

等字符组
str.replace(/(?:%7F){2,}/g, '~');

这将用%7F替换两个或多个~。也就是说,%7F%7Fb%7F将更改为~b%7F

str.replace(/(?:%7F)+/g, '~');

但是这会用%7F替换~的一次或多次出现。因此%7F%7Fb%7F会更改为~b~