使用Regex和JavaScript转义括号,括号和括号

时间:2012-11-23 00:38:20

标签: javascript regex

我喜欢这个例子的HTML:

<div class="code">
  function something(a, b) 
  {
     return 0;
  }
</div>

我想用spanbrackets包围所有括号,括号和大括号。像这样:

<div class="code">
  function something<span class="brackets">(a, b<span class="brackets">)</span> 
  <span class="brackets">{</span>
     return 0;
  <span class="brackets">}</span>
</div>

到目前为止我的JavaScript / jQuery:

$('.code').each(function() {

  $(this).html(
    $(this).html().replace("???", '<span class="brackets">$1</span>')
  );

});

我真的不知道该代替???。我在互联网上找到的任何东西都是人们想要在括号之间匹配而不是实际的括号本身。

为了清楚起见,我想要替换(){}[]的所有实例。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你可以将它们全部填充到一个字符类中(它匹配类中的任何单个字符)。字符类本身用方括号表示,所以你必须逃避内部的那些(这只是部分正确,但它绝对是好的做法):

/([(){}\[\]])/g

外圆括号在那里,因此捕获的值实际上最终为$1g就在那里,所有事件都会被替换。

请注意,这不是字符串!请勿使用"将其包围。只需将其作为replace的第一个参数提供:

...html.replace(/([(){}\[\]])/g, '<span class="brackets">$1</span>')

顺便说一句,您应该迭代DOM中的所有文本节点,并仅将替换应用于那些节点。否则,您可以将该标记添加到属性值或注释中(或者更糟糕的是,嵌入式JavaScript或CSS)。