2016-11-07 15 views
2

我想替換所有出現的字符串,但問題是我有一個刪除單詞的數組&刪除單詞的值。javascript string替換所有發生的數組值

例如:

var string = "this is a string to replace. This string should be replaced using javascript"; 

var replaceArray = ["this","is","string","should","javascript"]; 

var replaceArrayValue = ["There","are","strings","have to","node.js"]; 

for (var i = replaceArray.length - 1; i >= 0; i--) { 

    var finalAns = string.replace(replaceArray[i],replaceArrayValue[i]); 
} 

我期待像

There are strings to replace. There strings have to be replaced using node.js 

我發現了一些解決方案中,我得到了最好的解決方案here。 但我不能使用/string/g中的字符串。我必須使用replaceArray[i]

+0

可以。 'var regex = new RegExp(replaceArray [i],'g')' – Rajesh

回答

1

如果您更喜歡修復您的方法,您可以使用RegExp構造函數來構建包含變量的動態正則表達式,並確保只匹配包含具有單詞邊界的模式的整個單詞。不要忘記跳過字面模式,並在循環前聲明finalAns,並用變量內容string進行初始化。

var string = "this is string to replace. this string should replace using javascript"; 
 
var replaceArray = ["this","is","string","should","javascript"]; 
 
var replaceArrayValue = ["There","are","strings","have to","node.js"]; 
 
var finalAns = string; 
 
for (var i = replaceArray.length - 1; i >= 0; i--) { 
 
    finalAns = finalAns.replace(RegExp("\\b" + replaceArray[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + "\\b", "g"), replaceArrayValue[i]); 
 
} 
 
console.log(finalAns);

注意Roman's approach用靜態正則表達式似乎是最有效的當前任務(無需每次都動態地建立正則表達式)。

1

用下面的辦法與更換功能:

var string = "this is string to replace. this string should replace using javascript", 
 
    replaced = string.replace(/\b\w+\b/g, function ($m) { 
 
     var search = ["this","is","string","should","javascript"], 
 
      replacement = ["There","are","strings","have to","node.js"], 
 
      key = search.indexOf($m); 
 

 
     return (key !== -1)? replacement[key] : $m; 
 
    }); 
 

 
console.log(replaced);

從 「高性能的JavaScript」(尼古拉斯Zakas):

「 ... 回覆監視範圍外變量:將任何經常使用的範圍外變量存儲在本地變量中,然後直接訪問本地變量 。「

1

無需經常精通

只可以設置循環變量string =finalAns;。因爲每次循環設置舊字符串,則問題是出現,

var string = "this is string to replace. this string should replace using javascript"; 

var replaceArray = ["this","is","string","should","javascript"]; 

var replaceArrayValue = ["There","are","strings","have to","node.js"]; 
alert(replaceArray.length); 
for (var i = replaceArray.length - 1 ; i >= 0; i--) { 

    var finalAns = string.replace(replaceArray[i],replaceArrayValue[i]); 
    string =finalAns; 
} 
alert(finalAns); 

片段〔實施例

var string = "this is string to replace. this string should replace using javascript"; 
 

 
var replaceArray = ["this","is","string","should","javascript"]; 
 

 
var replaceArrayValue = ["There","are","strings","have to","node.js"]; 
 

 
for (var i = replaceArray.length - 1 ; i >= 0; i--) { 
 

 
    var finalAns = string.replace(replaceArray[i],replaceArrayValue[i]); 
 
    string =finalAns; 
 
} 
 
alert(finalAns);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>