【问题标题】:Regex to replace every character with another character EXCEPT for what's in square brackets正则表达式用另一个字符替换每个字符,方括号中的内容除外
【发布时间】:2014-09-23 03:28:52
【问题描述】:

您好,我需要正则表达式方面的帮助。如果可能的话,我不确定..

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

我希望所有不在 [] 括号内的字符都替换为其他字符;比方说一个时期。并且 [] 括号也被替换为相同的字符。

如此期望的输出:..........B...........A..........E.....

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

如果有人能提供帮助,我会尽力解释。

谢谢。

【问题讨论】:

  • 方括号内有多个字符吗?
  • 对不起,可能有多个字符
  • string.replace(/[^\]](?![^\[]*\])/g, '.')
  • @Sam 你可以提供它作为答案。
  • @Roman 为什么要删除当前问题?这与这个问题完全不同。我的意见是,如果有进一步的疑问,您应该接受 vks 的回答并继续下一个问题。或向以下回答者提问。

标签: javascript regex replace character brackets


【解决方案1】:
.(?![^\[]*\])|\[

试试这个。查看演示。

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

【讨论】:

  • 干得好!在 Javascript 中:'abc[foo]red[bar]123'.replace(/.(?![^\[]*\])|\[/g, '.');
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    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."
    

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

    下面的解决方案试图捕捉“括号外”的概念,使用更简单的 (?) 正则表达式表示“右括号(或字符串开头)和左括号(或字符串结尾)之间的所有内容”:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      相关资源
      最近更新 更多