正则表达式用另一个字符替换每个字符除了方括号中的内容

时间:2014-09-23 03:28:53

标签: javascript regex replace character brackets

嗨,我需要一个正则表达式的帮助..如果有可能我不确定..

输入字符串:Will you [B] meet me [A] in the [E] end

我希望[]括号内的所有字符都被其他字符替换;让我们说一段时间。并且[]括号也被相同的字符替换。

所需的输出:..........B...........A..........E.....

另一个例子:[A]red[B]elephant[C]hello[D] 输出:.A.....B..........C.......D.

如果有人可以提供帮助,那我试图解释得最好。

感谢。

3 个答案:

答案 0 :(得分:5)

.(?![^\[]*\])|\[

试试这个。看看演示。

http://regex101.com/r/lS5tT3/1

答案 1 :(得分:2)

或此模式
([^][]+(?=\]))*.并替换w / $1.
Demo

答案 2 :(得分:1)

您可以在括号上拆分,然后替换每个其他元素中的字符:

function replace(str, rep) {
    return str.split(/\[|]/).map(function(seg, i) {
        return i % 2 ? seg : seg.replace(/./g, rep);
    }).join(rep);
}

> replace("Will you [B] meet me [A] in the [E] end", '.')
          "..........B...........A..........E....."

> replace("[A]red[Bm]elephant[Cm]hello[D]", '.')
          ".A.....Bm..........Cm.......D."

如果您想要支持其他类型的括号(例如{},想要以某种方式转换括号内的文本等),此解决方案可能更具可扩展性。

下面的解决方案尝试捕获"括号外的概念",更简单的(?)regexp含义"右括号(或字符串的开头)和左括号之间的所有内容(或者字符串结束)":

function replace(str, rep) {
    return str.replace(/(^|]).*?(\[|$)/g, function(match) { 
        return match.replace(/./g, rep); 
    });
 }