替换连续字符串的JavaScript正则表达式

替换连续字符串的JavaScript正则表达式,javascript,regex,string,replace,Javascript,Regex,String,Replace,我有一根像这样的线 “+919357F%7F%7F%7F%00%00%29您的%20OTP%20for” 我需要将所有连续的%7F替换为~ 我用这个命令找到了一个几乎可行的解决方案 "+919357F%7F%7F%7F%00%00%00%29Your%20OTP%20for".replace(/[%7F]{2,}/g, '~'); 但由于某些原因,它确实会吞噬掉我需要保持完整的另外两个%标记。我也不明白{2,}代表什么?我知道它负责连续的替换,但不确定为什么2或3会有任何不同?将正则表达式中的

我有一根像这样的线

“+919357F%7F%7F%7F%00%00%29您的%20OTP%20for”

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

我用这个命令找到了一个几乎可行的解决方案

"+919357F%7F%7F%7F%00%00%00%29Your%20OTP%20for".replace(/[%7F]{2,}/g, '~');
但由于某些原因,它确实会吞噬掉我需要保持完整的另外两个
%
标记。我也不明白
{2,}
代表什么?我知道它负责连续的替换,但不确定为什么2或3会有任何不同?

将正则表达式中的
[]
(字符类)替换为
()
(捕获组或非捕获组)。在字符类中,所有字符都被视为一个单独的模式。因此
[fo]
将匹配单个字符
f
o
,而不是像
fo

str.replace(/(?:%7F){2,}/g, '~');
这将用
~
替换两个或多个
%7F
。也就是说,
%7F%7Fb%7F
将更改为
~b%7F


但这将用
~
替换一个或多个出现的
%7F
。所以
%7F%7Fb%7F
将更改为
~b~

预期的输出是什么?您只想提取OPT吗?regex的意思是“用一个~,重复替换这3个字符中任意一个的任意两个或更多连续序列:%,7,F,直到输入结束”。如果输入为5000个“7”字符,后跟一个“%”,则结果为一个“~”。请尝试以下操作:“+919357F%7F%7F%7F%7F%00%00%29您的%20OTP%20for”。替换(/\%7F/g,“~”)请参阅。右边用英语解释了你的正则表达式,你可以快速尝试学习。第二个适合我的目的。我看不出有任何选择接受这个答案。请指导我。@oshomaniac点击下箭头下方的记号(我答案的左侧)。谢谢-接受答案。这里有另一个类似的查询,希望得到同样的帮助。
str.replace(/(?:%7F)+/g, '~');