0
var tags=["div","span","body"];
for (i=0; i<=tags.length; i++){
  source = source.replace(/\&lt\;<tags[i]/i, '<span class="tags[i]">&lt;tags[i]</span>');
}

基本上,我试图将所有打开的 div、span 和 body 标签放在一个 span 周围,并相应地设置一个类。但是,我在将变量放在那里时遇到了问题。

我可以为每个不同的标签添加行和行,但考虑到每次按键都会调用此函数,我希望使代码尽可能小且高效。

或者还有其他选择吗?我的意思是,如果这些方面的事情是可能的,那就更好了:

source = source.replace(/\&lt\;<div|<span/i, '<span class="div|span">&lt;div|span</span>');

但是,它显然没有让我到任何地方。

4

2 回答 2

2

您可以使用 RegExp 对象从字符串构造您的正则表达式:

source = source.replace(new RegExp("\\&lt\\;<" + tags[i], "i"), '<span class="' + tags[i] + '">&lt;' + tags[i] + '</span>');

但是您也可以通过捕获标签并在替换中引用它来实现替代想法:

source = source.replace(/\&lt\;<(div|span|body)/i, '<span class="$1">&lt;$1</span>');
于 2013-02-07T21:57:03.907 回答
1

您可以使用带有| (equivalent of OR):()的正则表达式来获取匹配的元素(div、span 或 body),您可以使用$1

source.replace(/<(div|span|body)/i,'<span class="$1">&lt;$1&gt;</span>')
于 2013-02-07T21:58:32.977 回答