2010-08-04 48 views
3

正則表達式我有以下字符串和正則表達式:JavaScript的替換()的索引號

var string = "Dear [to name], [your name] has decided to share this [link]"; 
var patt = /\[+[A-Za-z0-9]+\]/; 

我希望能夠與動態輸入來改變每個括號內的變量。我將如何使用match()replace()來定位此正則表達式的第1次,第2次和第3次出現?

編輯:在,如果我這樣做document.write(body.match(patt));它將匹配只有最後一個[鏈接]

編輯時刻:整個字符串是從一個文本框的值取。每個括號的值取自其他文本輸入,並且在將文本放回文本框之前需要將其插入到字符串中。

+0

出於好奇,剛纔使用變量呢? – hookedonwinter 2010-08-04 22:32:22

+0

正在從textbox.value取文本 – kalpaitch 2010-08-04 22:34:44

+0

啊我看到了。指出。 – hookedonwinter 2010-08-04 22:42:42

回答

10

使用函數作爲第二個參數replace方法:

var replacement = { "to name": "Joe", "your name": "Fred", "link": "foo" }; 

string = string.replace(/\[([^\]]+)\]/g, function (_, group) { 
    return replacement[group]; 
}); 

哦,你的模式只匹配[link]文本的原因是因爲它允許括號,沒有空間之間的字母數字字符。

編輯:如果括號內的內容是不重要的,而你只是想取代他們的秩序,而不是使用哈希數組:

var replacement = [ "Joe", "Fred", "foo" ]; 
var index = 0; 
string = string.replace(/\[[^\]]+\]/g, function() { 
    return replacement[index++]; 
}); 
+0

感謝你提醒有關空白。 – kalpaitch 2010-08-04 22:44:14

+0

不幸的是我不能用括號中的內容相匹配,因爲這可能會改變 – kalpaitch 2010-08-04 22:45:54

+0

歡呼完美,有意義和作品 – kalpaitch 2010-08-04 23:02:57

3

假設這些括號內的項目都是一樣的,你根本不需要使用正則表達式。

var string = "Dear [to name], [your name] has decided to share this [link]"; 
var name = 'Bob'; 
var your_name = 'Jacob'; 
var link = 'http://google.com'; 

string = string.replace('[to name]', name).replace('[your name]', your_name).replace('[link]', link) 

alert(string)​ 
+0

這就是問題,這些括號內的值會發生變化,所以我需要一種方法通過索引/順序 – kalpaitch 2010-08-04 22:42:46

+0

gotchya來取代它們。那麼在那種情況下,@肖恩的答案>我的。 – hookedonwinter 2010-08-04 22:43:52