2012-10-10 26 views
3

在某個元素中,我需要選擇與某個正則表達式匹配的不同字符串,並用標籤包裝它們。我怎樣才能做到這一點 ?jQuery:包裝匹配正則表達式的字符串

我想:

var str = jQuery("#my_div").html(); 
var regex = "\([a-z]{2}\)"; 
jQuery("#my_div").html(str.replace(regex, "<span>$1</span>")); 

..但這個包裝整個元素,而不是元素中選擇的字符串。

+1

我們需要看到你的正則表達式,以及一些示例HTML能夠幫助你。 1美元的價值可能不是你認爲的價值。 – CaffGeek

+0

好的。我相應編輯。 – drake035

+0

我更新了我的答案,但問題是你的正則表達式沒有捕獲'()',只是在整個事物中添加一些括號,所以它是'(\([az] {2} \))' – CaffGeek

回答

5

你的榜樣的問題是你有沒有捕獲組,更改正則表達式爲(\([a-z]{2}\))

這裏是工作的一個例子正則表達式中的HTML代替:http://jsfiddle.net/gibble/NYVWg/

<style>span.highlight { color: purple; }​</style> 
<body>bla bla <div id="test">this (is) some text this (is) some text</div> bla bla​<body> 

var oldHtml = $('#test').html(); 
var newHtml = oldHtml.replace(/(\([a-z]{2}\))/g,"<span class='highlight'>$1</span>"); 
$('#test').html(newHtml);​ 
+0

有問題與此代碼。如果添加更多的模式實例(例如:「this(is)some some text this(is)some text this(is)some text」),它只會選擇第一個! – drake035

+0

@ drake035,通過將字母g添加到正則表達式(適用於全球)易於修復 – CaffGeek

+0

作品,thx man! – drake035

2

你的代碼應該工作,因爲你的正則表達式中有一個子表達式。看看這個jsfiddle

HTML:

​<div id="my_div">foo bar my_regex foo bar</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

JS:

var str = jQuery("#my_div").html(); 
var regex = /(my_regex)/; 
jQuery("#my_div").html(str.replace(regex, '<span class="red">$1</span>'));​​​​​​​​​ 

CSS:

​.red { 
    color : red; 
}​ 
相關問題