2017-02-07 58 views
0

我試圖爲具有HTML標記的字符串匹配RegEx。更確切地說,我有,例如:JavaScript正則表達式匹配具有特定類的DIV

var myDivs = '<div class="wrapper"><div class="header1">Header1</div></div><div class="wrapper"><div class="header2">Header2</div></div>'; 

/* Result */ 
['<div class="wrapper"><div class="header1">Header1</div></div>', '<div class="wrapper"><div class="header2">Header2</div></div>'] 

我想班「包裝」在我Angular2項目中使用正則表達式來此字符串的div過濾。我沒有使用jQuery。

請任何幫助。

回答

1

您不能使用正則表達式來解析HTML(請參閱this)。相反,您可以使用本機DOMParser這樣的:

function getElements(html, selector) { 
 
    var parser = new DOMParser(); // the parser that will parse the html 
 
    var dom = parser.parseFromString(html, "text/html"); // parse the text in 'html' as html 
 
    var elems = dom.querySelectorAll(selector); // select the elements that match the CSS selector 'selector' 
 
    // return their outerHTML (elems is an array like object so map is not defined thus we have to call it in this way) 
 
    return Array.prototype.map.call(elems, function(e) { 
 
    return e.outerHTML; 
 
    }); 
 
} 
 

 

 
var myDivs = '<div class="wrapper"><div class="header1">Header1</div></div><div class="wrapper"><div class="header2">Header2</div></div>'; 
 

 
console.log(getElements(myDivs, ".wrapper"));

另一種方法:(最好的一個)

您可以將HTML附加到一個div,然後只選擇這個div裏的元素匹配:

function getElements(html, selector) { 
 
    var div = document.createElement("div"); // the container element 
 
    div.innerHTML = html; // set it's html to 'html' 
 
    var elems = div.querySelectorAll(selector); // select the elements that match the CSS selector 'selector' 
 
    // return their outerHTML (elems is an array like object so map is not defined thus we have to call it in this way) 
 
    return Array.prototype.map.call(elems, function(e) { 
 
    return e.outerHTML; 
 
    }); 
 
} 
 

 

 
var myDivs = '<div class="wrapper"><div class="header1">Header1</div></div><div class="wrapper"><div class="header2">Header2</div></div>'; 
 

 
console.log(getElements(myDivs, ".wrapper"));

注:的選擇可以是任何東西(任何有效CSS Selector)。這更靈活。

+0

正是我想要的。我很樂意提供建議。我從來沒有這樣的問題,所以我不知道我必須做什麼。因爲我看到這段代碼有效,所以我有一個小問題,在數組中,類中有「wrapper」。我怎樣才能脫掉反斜槓? – Denis

+0

@Denis根本沒有backslaches。這只是逃避引號'''。提醒結果看看它的實際樣子!或者使用控制檯而不是代碼段控制檯記錄它! –

+0

謝謝你,男人,你救了我的命,我正在用正則表達式自殺謝謝 – Denis