2

现在,我有这个替换:

var newcontent = newcontent
                .replace(/<div id="container_gallery_"(.*)><\/div>/gi,"");

是否可以传递一个变量来代替<div id="container_gallery_

我的

function delAlbum(a) { }

执行此替换,我想将变量a放入

-编辑-

感谢您提供的信息!少掉头发!

4

3 回答 3

2

您可以通过对象符号而不是速记符号来构建 RegExp :

function delAlbum(a) {
    var regex = new RegExp( a + '"(.*)><\/div>', 'gi' );

    var newcontent = newcontent
                    .replace( regex,"");
    // ...
}
于 2013-02-16T09:23:52.940 回答
2

要将变量放入正则表达式,您需要将正则表达式构造为字符串,然后将其传递给 RegExp 对象构造函数,如下所示:

var target = a + "(.*)></div>";
var newcontent = newcontent.replace(new RegExp(target, "gi"), "");

一般来说,在不受控制的 HTML 上进行正则表达式匹配是一个坏主意,而在来自.innerHTML属性的 HTML 上进行匹配则是一个非常糟糕的主意,因为有很多合法的 HTML 方法可以破坏你的正则表达式。

于 2013-02-16T09:24:24.863 回答
0

正如其他响应者所说,您可以为此使用 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 属性中的非法字符。

于 2013-02-16T12:59:27.527 回答