2013-05-12 78 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