2016-06-10 145 views
0

我有這個默認字符串:{0} blah blah blah blah {1}其中{0}{1}將在文本框中加載時替換爲值。默認字符串內容的更改

例:{0} = "CUP"{1} = "GIRLS",將顯示在文本框中的字符串爲"CUP blah blah blah blah GIRLS"

現在的問題是這樣的:當用戶編輯默認消息,並點擊「保存」,我怎麼更換修改後的消息中的{0} =「CUP」和{1} =「GIRLS」? (在消息變化可以發生在原始消息的以往一部分)

回答

1

使用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>

+0

這個怎麼樣的場景(在保存之前):'foo foo foo CUP foo blah blah blah GIRLS'?我不認爲它會滿足它。 – Musikero31

+0

@ Musikero31你需要將原始文本存儲在一個字符串變量中...... –

+0

爲什麼不使用'{\ d +}'而不是硬代碼來期望0或1 - 那麼函數可以用來替換任意數量的字符串。 – Alnitak

1

您可以調用自定義替換功能:

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 
+0

不錯的答案,很好的廣義函數:) – Alnitak