替换方括号内的文本

7
var a = "[i] earned [c] coin for [b] bonus";

如何在JavaScript中从上面的变量中获取字符串“__ earned __ coin for __ bonus”?
我想做的就是将所有括号[]及其内容替换为__。
3个回答

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

如果你希望换行是可能的,那么可以使用:

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

在你的第二个例子中,你不需要使 * 不贪婪。 - alex
谢谢,顺便问一下,能否给我解释一下它是如何工作的?也许有关于这个的完整教程吗? - theHack
http://regular-expressions.info 对编程很有帮助...如果有机会的话,我会尝试解释一下。 - Brett Zamir
*?(正如Afrig指出的,这种情况下可以简化为*,但我选择不这样做,因为使用它往往很危险,因为它可能替换比预期更多的内容)意味着先前的字符或类可以出现0次或多次。 因此,[^\]]*?表示查找任何不是结束括号的内容任意次数。 我们使用它而不是仅仅使用.*?,因为.不会匹配换行符。 最后,\]在结尾找到最后一个括号。 - Brett Zamir
以上解决方案在Node.js中无效。 - undefined
显示剩余3条评论

4

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

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

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

jsFiddle.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接