现在,我有这个替换:
var newcontent = newcontent
.replace(/<div id="container_gallery_"(.*)><\/div>/gi,"");
是否可以传递一个变量来代替<div id="container_gallery_
?
我的
function delAlbum(a) { }
执行此替换,我想将变量a
放入
-编辑-
感谢您提供的信息!少掉头发!
现在,我有这个替换:
var newcontent = newcontent
.replace(/<div id="container_gallery_"(.*)><\/div>/gi,"");
是否可以传递一个变量来代替<div id="container_gallery_
?
我的
function delAlbum(a) { }
执行此替换,我想将变量a
放入
-编辑-
感谢您提供的信息!少掉头发!
您可以通过对象符号而不是速记符号来构建 RegExp :
function delAlbum(a) {
var regex = new RegExp( a + '"(.*)><\/div>', 'gi' );
var newcontent = newcontent
.replace( regex,"");
// ...
}
要将变量放入正则表达式,您需要将正则表达式构造为字符串,然后将其传递给 RegExp 对象构造函数,如下所示:
var target = a + "(.*)></div>";
var newcontent = newcontent.replace(new RegExp(target, "gi"), "");
一般来说,在不受控制的 HTML 上进行正则表达式匹配是一个坏主意,而在来自.innerHTML
属性的 HTML 上进行匹配则是一个非常糟糕的主意,因为有很多合法的 HTML 方法可以破坏你的正则表达式。
正如其他响应者所说,您可以为此使用 RegExp 构造函数。但是,当您使用它时,您应该摆脱它(.*)
。假设它是为了消耗它所拥有的任何其他属性<div>
,你最好使用[^<>]*
. 这将一次将匹配限制为一个元素;(.*)
是终极逃脱艺术家。
但我很好奇:你真的在传递字符串<div id="container_gallery_"
,包括 HTML 元素的第一部分吗?还是您只是传递了属性值的替换(例如container_gallery_
)?如果是这种情况,这个正则表达式应该更好地为您服务:
var regex = new RegExp('<div\s+"` + (your var) + '"[^<>]*></div>', 'gi' );
I'm assuming the `id` attribute is always in the first position which generally not a safe assumption, but it makes the regex a lot easier, both to write and to read. ;)
并且不要忘记检查传入的字符串是否存在 HTML 属性中的非法字符。