В Javascript, как я могу выполнить глобальную замену в строке с переменной внутри '/' и '/g'?
Я хочу выполнить глобальную замену строки с помощью String.replace в Javascript.
В документации я читаю, что я могу сделать это с помощью /g, то есть, например,
var mystring = mystring.replace(/test/g, mystring);
и это заменит все вхождения внутри mystring. Нет кавычек для выражения.
Но если у меня есть переменная, которую можно найти, как я могу сделать это без кавычек?
Я пробовал что-то вроде этого:
var stringToFind = "test";
//сначала попробуйте
mystring = mystring.replace('/' + stringToFind + '/g', mystring);
//вторая попытка, не так много смысла
mystring = mystring.replace(/stringToFind/g, mystring);
но они не работают. Любые идеи?
Ответы
Ответ 1
Можете ли вы использовать prototype.js? Если это так, вы можете использовать String.gsub, например
var myStr = "a day in a life of a thing";
var replace = "a";
var resultString = myStr.gsub(replace, "g");
// resultString will be "g day in g life of g thing"
Он также примет регулярные выражения. Для меня это один из самых элегантных способов его решения. документация prototypejs gsub
Ответ 2
var mystring = "hello world test world";
var find = "world";
var regex = new RegExp(find, "g");
alert(mystring.replace(regex, "yay")); // alerts "hello yay test yay"
Если вам нужно это в функцию
replaceGlobally(original, searchTxt, replaceTxt) {
const regex = new RegExp(searchTxt, 'g');
return original.replace(regex, replaceTxt) ;
}
Ответ 3
Для регулярного выражения new RegExp(stringtofind, 'g');
. НО. Если 'find содержит символы, которые являются особыми в регулярном выражении, они будут иметь значение regexy. Поэтому, если вы попытаетесь заменить "." в 'abc.def' с 'x', вы получите "xxxxxxx" - крики.
Если все, что вам нужно, это простая замена строки, нет необходимости в регулярных выражениях! Здесь простая строка заменяет идиому:
mystring= mystring.split(stringtofind).join(replacementstring);
Ответ 4
Регулярные выражения намного медленнее, чем строковый поиск. Таким образом, создание регулярного выражения с экранированной поисковой строкой не является оптимальным способом. Даже цикл, хотя строка будет быстрее, но я предлагаю использовать встроенные предварительно скомпилированные методы.
Вот быстрый и чистый способ быстрой замены глобальной строки:
sMyString.split(sSearch).join(sReplace);
И что это.
Ответ 5
String.prototype.replaceAll = function (replaceThis, withThis) {
var re = new RegExp(RegExp.quote(replaceThis),"g");
return this.replace(re, withThis);
};
RegExp.quote = function(str) {
return str.replace(/([.?*+^$[\]\\(){}-])/g, "\\$1");
};
var aa = "qwerr.erer".replaceAll(".","A");
alert(aa);
сообщение silmiar
Ответ 6
Это регулярное выражение, а не строка. Используйте конструктор для объекта RegExp для динамического создания регулярного выражения.
var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');
Ответ 7
Try:
var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
Ответ 8
Вы можете использовать следующее решение для выполнения глобальной замены строки с переменной внутри '/' и '/g':
myString.replace(new RegExp(strFind, 'g'), strReplace);
Ответ 9
Если вы хотите, чтобы переменные интерполировались, вам нужно использовать объект RegExp
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions
Пример:
var str = "This is my name";
var replace = "i";
var re = new RegExp(replace, 'g')
str = str.replace(re, 'p');
alert(str);
Ответ 10
Динамическая глобальная замена
Я пришел в эту тему, ища более сложное решение, на которое здесь не ответил. Теперь я нашел ответ, поэтому я отправлю его на случай, если кто-либо найдет его полезным.
Я хотел сделать динамическую глобальную замену, где строки замены основаны на исходных совпадениях.
Например, чтобы загладить первую букву всех слов (например, "cat sat mat" в "Mat Sat Mat" ) с заменой глобальной находки. Вот как это сделать.
function capitaliseWords(aString) {
// Global match for lowercase letters following a word boundary
var letters = aString.match(/\b[a-z]/g), i, letterMatch;
// Loop over all matched letters
for( i = 0; i < letters.length; i++ ) {
// Replace the matched letters with upper case versions
letterMatch = new RegExp('\\b'+letters[i]); // EDIT - slight fix
aString = aString.replace(letterMatch, letters[i].toUpperCase());
}
// Return our newly capitalised string
return aString;
}
alert( capitaliseWords("cat sat mat") ); // Alerts "Cat Sat Mat"
Ответ 11
Вы можете использовать следующий метод
см. эту функцию:
function SetValue()
{
var txt1='This is a blacK table with BLack pen with bLack lady';
alert(txt1);
var txt2= txt1.replace(/black/gi,'green');
alert(txt2);
}
Синтаксис:
/SEARCH_STRING/{г |} г
где
- g - это глобальная чувствительная к регистру замена.
- gi - это бла-бисная замена без учета регистра.
Вы можете проверить эту ссылку JSBIN
http://jsbin.com/nohuroboxa/edit?html,js,output