2013-07-03 34 views
0

我想編寫一個正則表達式模式,即使他們有unicode字符來包裝它們與一些html代碼完整的單詞或短語相匹配。所以我使用這種模式:Javascript詞邊界unicode空間問題

var pattern=new RegExp('(^|\\s)'+phrase+'(?=\\s|$)', "gi"); 

即使對於一個問題的多詞短語,它也可以完美工作。如果短語不是字符串的開頭,則它與該單詞前面的空格相匹配。所以在我包裝後我會失去這個空間。我只想包裝短語變量而不是空格。

例如:

var string="This is a nice sentence."; 
var phrase="is a nice"; 
/*OUTPUT: Thisis a nicesentence*//*HTML OUTPUT: This<span>is a nice</span>sentence*/ 
/*What I want: This <span>is a nice</span> sentence*/ 

當然,這種模式可以工作:

var pattern=new RegExp(phrase, "gi"); 

但我不會找那些的另一個子字符串。

是否有可能通過更好的正則表達式解決我的問題?

回答

1

簡單地寫回你captured在第1組:

output = string.replace(pattern, '$1<span>' + phrase + '</span>'); 

如果你不使用replacematchexec和做手工更換,仍然可以訪問捕獲組返回數組並插入在您的span之前的空間或空串。

順便說一句,如果捕獲詞組,以及,你不需要更換任何字符串連接:

var pattern = new RegExp('(^|\\s)('+phrase+')(?=\\s|$)', "gi"); 
output = string.replace(pattern, '$1<span>$2</span>'); 
+0

酷!謝謝你,它完美的作品。我爲此奮鬥了好幾天。 – martincpt