我有一个看起来像这样的字符串
"+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有什么不同?
答案 0 :(得分:2)
使用[]
(捕获或非捕获组)替换RegEx中存在的()
(字符类)。在字符类中,所有字符都被视为单独的模式。因此,[fo]
会匹配单个字符f
或o
,而不匹配fo
str.replace(/(?:%7F){2,}/g, '~');
这将用%7F
替换两个或多个~
。也就是说,%7F%7Fb%7F
将更改为~b%7F
或的
str.replace(/(?:%7F)+/g, '~');
但是这会用%7F
替换~
的一次或多次出现。因此%7F%7Fb%7F
会更改为~b~