2011-08-01 206 views
0

只是好奇。有什麼區別?格式化動態正則表達式

var a=text.replace(/(Nullam|ligula|in)/ig,'`<b>$1</b>`'); 

var string = "Nullam|lingula|in"; 
var pattern = new RegExp (string, "ig");  
var a=text.replace(pattern ,'`<b>$1</b>`'); 

這應該給出了相同的結果,但事實並非如此。有什麼想法嗎?

謝謝

+0

如果你在第二個例子中寫道'$ 0',而不是'$ 1',那麼你會得到相同的導致兩者。實際上,如果你在第一個例子中使用了'$ 0',你也會得到。 –

回答

3

你在後面的聲明中缺少parens,所以沒有捕獲。而該標誌爲gi,不ig(雖然我不知道這有什麼差別)

var reString = "(Nullam|lingula|in)"; var pattern = new RegExp (reString, "gi"); 
+0

例如,當第一個技巧找到一個單詞時,它會使它變成粗體,並且不會'替換單詞。與此同時,當第二個人找到一個單詞時,它會使其變得粗體,並且從字面上將它替換爲「$ 1」。這是我的實驗所產生的結果。我試圖達到的目的就是讓這個詞變成粗體而不用直接替換這個詞。這可能嗎? (帶動態關鍵字) – Nebby

+0

是的,那是因爲你錯過了創建捕獲組的parens。 – Mrchief

+0

按照你的建議。我試過了,無法讓它工作。這裏是我的實驗: 第一種技術http://jsfiddle.net/oceog/q8S7E/ AND 第二種技術:http://jsfiddle.net/UyWTf/1/ – Nebby