2013-02-16 45 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屬性非法字符傳入的字符串。