【问题标题】:Replace text inside of square brackets替换方括号内的文本
【发布时间】:2011-05-24 09:46:05
【问题描述】:
var a = "[i] earned [c] coin for [b] bonus";

如何在 JavaScript 中从上面的变量中获取字符串“__为 __ 奖金赚取 __ 硬币”?

我要做的就是将所有括号[]及其内容替换为__

【问题讨论】:

    标签: javascript regex


    【解决方案1】:
    a = a.replace(/\[.*?\]/g, '__');
    

    如果您希望换行符成为可能,您可以使用:

    a = a.replace(/\[[^\]]*?\]/g, '__');
    

    【讨论】:

    • 在第二个示例中,您不需要使 * 不贪婪。
    • 谢谢,顺便说一句,你能解释一下它是如何工作的吗?也许有一个完整的教程?
    • regular-expressions.info 很有帮助……以后有机会再解释一下
    • @alex:是的,我只是为了安全起见总是使用它,以防表达式发生变化......
    • [] 这样的字符在正则表达式中有特殊的含义,所以当你真正想要一个括号时,你必须用\ 来转义它。所以第一项 (\[) 匹配左括号。然后是[^\]][ 和最后的] 表示允许将一组字符放在其中的字符类。在这种情况下,我们只需要一个字符(] 尽管我们需要在此处将其转义为 \],否则正则表达式解析器可能会认为我们结束了该类),但我们使用带有插入符号 (^) 的字符类来意思是“不”(不是括号)。
    【解决方案2】:
    a = a.replace(/\[[^\]]+\]/g, '__');
    

    jsFiddle.

    【讨论】:

      【解决方案3】:

      这是一个有趣的组匹配示例。

      var text = "[i] italic [u] underline [b] bold";
      
      document.body.innerHTML = text.replace(/\[([^\]]+)\]/g, '(<$1>$1</$1>)');

      故障

      /           // BEGIN  pattern
        \[        // FIND   left bracket (literal) '['
          (       // BEGIN  capture group 1
            [     // BEGIN  character class
              ^   // MATCH  start anchor OR
              \]  // MATCH  right bracket (literal) ']'
            ]     // END    character class
            +     // REPEAT 1 or more
          )       // END    capture group 1
        \]        // MATCH  right bracket (literal) ']'
      /           // END    pattern
      g           // FLAG   global search
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-10
        • 2016-12-08
        • 1970-01-01
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        相关资源
        最近更新 更多