我有這個默認字符串:{0} blah blah blah blah {1}
其中{0}
和{1}
將在文本框中加載時替換爲值。默認字符串內容的更改
例:{0} = "CUP"
和{1} = "GIRLS"
,將顯示在文本框中的字符串爲"CUP blah blah blah blah GIRLS"
現在的問題是這樣的:當用戶編輯默認消息,並點擊「保存」,我怎麼更換修改後的消息中的{0} =「CUP」和{1} =「GIRLS」? (在消息變化可以發生在原始消息的以往一部分)
我有這個默認字符串:{0} blah blah blah blah {1}
其中{0}
和{1}
將在文本框中加載時替換爲值。默認字符串內容的更改
例:{0} = "CUP"
和{1} = "GIRLS"
,將顯示在文本框中的字符串爲"CUP blah blah blah blah GIRLS"
現在的問題是這樣的:當用戶編輯默認消息,並點擊「保存」,我怎麼更換修改後的消息中的{0} =「CUP」和{1} =「GIRLS」? (在消息變化可以發生在原始消息的以往一部分)
使用String#replace()
方法
console.log(
'{0} blah blah blah blah {1}'
.replace(/\{0}/, 'CUP')
.replace(/\{1}/, 'GIRLS')
)
或存儲替換內容的陣列內,然後更換與匹配的內容(偶對象可以在這裏使用)。
var rep = ['CUP', 'GIRLS'];
console.log(
'{0} blah blah blah blah {1}'
.replace(/\{(\d+)}/g, function(_, m1) {
return rep[m1];
})
)
UPDATE: 有兩個文本輸入工作演示。
var div = document.getElementById('result'),
t1 = document.getElementById('text1'),
t2 = document.getElementById('text2'),
str = '{0} blah blah blah blah {1}';
function change() {
div.innerHTML = str
.replace(/\{0}/, t1.value)
.replace(/\{1}/, t2.value)
}
<input type="text" oninput="change()" id="text1" />
<input type="text" oninput="change()" id="text2" />
<div id="result"></div>
您可以調用自定義替換功能:
var replace = function(s,d) {
return s.replace(/\{(\d+)\}/g,function(m,k,v){
return d[k];
});
}
var result = replace("{0} blah blah blah blah {1}", ["hello", "world"]);
console.log(result);
//Returns: hello blah blah blah blah world
或者你可以將這個方法添加到字符串類(不推薦)
String.prototype.rplc = function(data) {
return this.replace(/\{(\d+)\}/g,function(m,k,v){
return data[k];
});
}
var result = "{0} blah blah blah blah {1}".rplc(["hello", "world"]);
console.log(result);
//Returns: hello blah blah blah blah world
不錯的答案,很好的廣義函數:) – Alnitak
這個怎麼樣的場景(在保存之前):'foo foo foo CUP foo blah blah blah GIRLS'?我不認爲它會滿足它。 – Musikero31
@ Musikero31你需要將原始文本存儲在一個字符串變量中...... –
爲什麼不使用'{\ d +}'而不是硬代碼來期望0或1 - 那麼函數可以用來替換任意數量的字符串。 – Alnitak