如何在两个相同长度的字符串之间替换字符串

时间:2018-08-27 22:57:25

标签: javascript regex

我有一个像这样的输入字符串:

ABCDEFG[HIJKLMN]OPQRSTUVWXYZ

如何将[]之间的字符串中的每个字符替换为X(导致与字符相同的X个数)?

例如,使用上面的输入,我想要一个输出:

ABCDEFG[XXXXXXX]OPQRSTUVWXYZ

我正在为此使用JavaScript的RegEx,并且希望答案是使用JavaScript的RegEx替换功能来实现的实现。


我是RegEx的新手,所以请解释一下您的工作,并在可能的情况下链接文章,以获取更多帮助。

4 个答案:

答案 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

regex101 example

(?= )是“正向超前断言”;它会先窥视当前匹配点,而不消耗字符,以验证其内容是否匹配。在这种情况下,“ [^ [] *]”与我上面描述的完全匹配。

现在,您可以用单个“ X”替换每个[A-Z]。