2013-02-16 75 views
2

现在,我有这样的替换:JavaScript中,正则表达式,VAR图案

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

是否有可能通过一个变量来代替<div id="container_gallery_

function delAlbum(a) { } 

执行该更换了,我希望把变量a

CNC中

感谢您提供的信息! 少hairloss!

+3

很简单。不要在HMTL中使用reglar表达式,这样的事情变得容易。 – Tomalak 2013-02-16 09:23:25

+1

由于您使用JS,为什么不通过DOM函数访问div? (应该有一个与jQuery的方式,我不知道JS,但肯定有某种方式)。 – nhahtdh 2013-02-16 09:33:28

回答

2

你可以建立通过object notation的正则表达式,而不是速记之一:

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

    var newcontent = newcontent 
        .replace(regex,""); 
    // ... 
} 
2

为了把一个变量为正则表达式,你需要构造正则表达式作为一个字符串,然后把它传递给RegExp对象的构造是这样的:

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

在一般情况下,这是一个坏主意,做不受控制的HTML和一个非常糟糕的主意,做它,因为有很多是来自.innerHTML财产HTML正则表达式匹配腿al HTML方式打破你的正则表达式。

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属性非法字符传入的字符串。