2012-09-12 57 views
0

測試字符串是:的Javascript正則表達式替換工作不正常

hello hello hello 

<span class="self-reference">Tom</span> I don't know <span class="self-reference">Tom</span> I don't think. 

我想出來的:

hello hello hello 

@Tom I don't know @Tom I don't think. 

我用這個表達式:

comment = comment.replace(/\<span class="self-reference"\>(.*)\<\/span\>/gi,"@$1"); 

但它輸出:

hello hello hello 

@Tom</span> I don't know <span class="self-reference">Tom I don't think. 

任何人都可以告訴我如何修改它,使其按預期工作?

+0

強制性.. http://stackoverflow.com/questions/1732348/正則表達式匹配開放標籤除xhtml自包含標籤/ 1732454#1732454 –

回答

3

使用非貪婪正則表達式匹配:(。*)

comment = comment.replace(/\<span class="self-reference"\>(.*?)\<\/span\>/gi,"@$1"); 

沒有我加了?,您正則表達式將整個字符串直到最後</span>它在你的字符串匹配創立。使用非貪婪的運算符*?,只要找到匹配項就立即停止匹配。

懶量化

在正則表達式的標準量詞是貪婪的,這意味着它們匹配儘可能多的,因爲他們可以。

source

+0

謝謝!工作的魅力 –

+2

雖然這是貪婪的完全相反:-) –

2

另一種可能的解決方案:

comment = comment.replace(/\<span class="self-reference"\>([^<]+)\<\/span\>/gi,"@$1"); 

([^<]+)直到<發現捕獲所有字符

相關問題