2016-11-07 2 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.

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);

От "High Performance JavaScript" (Николас Закаса):

" ... re garding out-of-scope variables: хранить часто используемые переменные out-of-scope в локальных переменных, а затем напрямую обращаться к локальным . "

1

без регулярного опыта

только можно установить в цикле переменнойstring =finalAns;. Потому что каждый раз Loop установлен старую строку, то проблемы являются происходит,

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); 

Отрывок Exmaple

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>

Смежные вопросы