我有一个像这样的输入字符串:
ABCDEFG[HIJKLMN]OPQRSTUVWXYZ
如何将[]
之间的字符串中的每个字符替换为X
(导致与字符相同的X
个数)?
例如,使用上面的输入,我想要一个输出:
ABCDEFG[XXXXXXX]OPQRSTUVWXYZ
我正在为此使用JavaScript的RegEx,并且希望答案是使用JavaScript的RegEx替换功能来实现的实现。
我是RegEx的新手,所以请解释一下您的工作,并在可能的情况下链接文章,以获取更多帮助。
答案 0 :(得分:2)
使用replace()并将匹配项传递给function as parameter,然后使用Array(m.length).join("X")
生成所需的 X :
var str = "ABCDEFG[HIJKLMN]OPQRSTUVWXYZ"
str = str.replace(/\[[A-Z]*\]/g,(m)=>"["+Array(m.length-1).join("X")+"]")
console.log(str);
我们也可以在正则表达式中使用.*
代替[A-Z]
来匹配任何字符。
关于正则表达式,有成千上万的资源,特别是在JavaScript中,您可能会看到Regular Expressions MDN,但我认为,最好的学习方法是练习,我发现regex101很有用。
答案 1 :(得分:0)
const str="ABCDEFG[HIJKLMN]OPQRSTUVWXYZ";
const run=str=>str.replace(/\[.*]/,(a,b,c)=>c=a.replace(/[^\[\]]/g,x=>x="X"));
console.log(run(str));
第一个模式/\[.*]/
用于选择括号[]中的字母,第二个模式/[^\[\]]/
用于将字母替换为“ X”
答案 2 :(得分:0)
您可以使用以下解决方案在两个方括号之间替换字符串:
const rxp = /\[.*?\]/g;
"ABCDEFG[HIJKLMN]OPQRSTUVWXYZ".replace(rxp, (x) => {
return x.replace(rxp, "X".repeat(x.length)-2);
});
答案 3 :(得分:0)
我们可以看到,您要匹配的每个字母后面都带有一系列零个或多个非'['字符,直到找到一个']'。用JavaScript友好的正则表达式表达起来非常简单:
/[A-Z](?=[^\[]*\])/g
(?= )
是“正向超前断言”;它会先窥视当前匹配点,而不消耗字符,以验证其内容是否匹配。在这种情况下,“ [^ [] *]”与我上面描述的完全匹配。
现在,您可以用单个“ X”替换每个[A-Z]。