从javascript中的字符串变量创建正则表达式

时间:2013-02-07 21:45:01

标签: javascript regex variables

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标签放在一个带有相应类的跨度的周围。但是,我遇到了将变量放在那里的问题。

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

还是有其他选择吗?我的意思是,如果沿着这些方向发生某些事情会更好:

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

但是,它显然不会让我在任何地方。

2 个答案:

答案 0 :(得分: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>');

答案 1 :(得分:1)

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

获取它们
source.replace(/<(div|span|body)/i,'<span class="$1">&lt;$1&gt;</span>')