2013-05-12 219 views
0
更換匹配的正則表達式

我的目標是用引號括任何內容與特定ID的DIV。獲得來自jQuery的

舉例來說,如果我有這個字符串:

Bananas are "green", "pineapples" are blue. 

我想要得到這樣的:

Bananas are <div id="mydivname">"green"</div>, <div id="mydivname">"pineapples"</div> are blue. 

的問題是,我不知道究竟會在什麼括號並沒有關係,我只是希望它被包裹在字符串中。

我想出了這樣的代碼:

var string = $('#somediv').html().replace(/\".*?\"/g,'<div id="mydivname">' + regexp + '</code>'); 
$('#somediv').html(string) 

我的問題是,我不能讓該元素的正則表達式,我只能用一些值替換,但我想它包在<div>'s。

如何從迪獲得.replace匹配的正則表達式使用它作爲replaceText?

+2

ID必須是唯一的 – hjpotter92 2013-05-12 17:53:54

+0

旁白:你不得不使用類而不是ID的這一點。 – m90 2013-05-12 17:56:15

回答

1

您可以使用引用捕獲組

$('#somediv').html().replace(/(".*?")/g, '<div class="foo">$1</div>'); 

或者更換功能:

$('#somediv').html().replace(/".*?"/g, function(match) { 
    return '<div class="foo">' + match + '</div>'; 
}); 

小心在HTML代替的東西。這將打破#somediv的子女的引用屬性。

如果可以,請使用.text()而不是.html()或使用此替換函數遍歷文本節點。

+0

*「小心在HTML更換的東西,這將打破#somediv的孩子帶引號的屬性。」 *的確。你可以只處理文本節點的文本,並使用正則表達式'儘量減少這種風險/「[^」] +「/'...我想我會是非常不願意這樣做,沒有在這些方面縮小焦點! – 2013-05-12 18:02:12

+0

感謝完美工作對我來說可是我該怎麼辦,如果我想要包裝'什麼< - 一些文本 - >',而不是報價 – 2013-05-12 19:20:07

+0

@Timbo_KZ:?試着想出來 – Blender 2013-05-12 19:21:21