В Javascript, как я могу выполнить глобальную замену на строку с переменной внутри '/' и '/g'?
Я хочу выполнить глобальную замену строки с помощью строки.заменить в 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);
но они не работают. Есть идеи?
11 ответов:
вы можете использовать прототип.Джей? Если это так, вы можете использовать строку.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
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"
для регулярных выражений,
new RegExp(stringtofind, 'g');. НО. Если 'find' содержит символы, которые являются специальными в регулярном выражении, они будут иметь свое значение regexy. Так что если вы попытались заменить '.'in' abc.def ' с 'x', вы получите' xxxxxxx ' - упс.Если все, что вы хотите, это простая замена строки, нет необходимости в регулярных выражениях! Вот простая строка заменить идиома:
mystring= mystring.split(stringtofind).join(replacementstring);
регулярные выражения намного медленнее, чем поиск строк. Таким образом, создание регулярного выражения с экранированной строкой поиска не является оптимальным способом. Даже цикл, хотя строка будет быстрее, но я предлагаю использовать встроенные предварительно скомпилированные методы.
вот быстрый и чистый способ сделать быструю глобальную строку заменить:
sMyString.split(sSearch).join(sReplace);и это все.
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, "\"); }; var aa = "qwerr.erer".replaceAll(".","A"); alert(aa);
это регулярное выражение, а не строку. Используйте конструктор для объекта RegExp для динамического создания регулярного выражения.
var r = new RegExp(stringToFind, 'g'); mystring.replace(r, 'some replacement text');
попробуй:
var stringToFind = "test"; mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
Если вы хотите интерполировать переменные, вам нужно использовать объект 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);
динамическая глобальная замена
Я пришел к этой теме, ища немного более сложное решение, которое здесь не отвечает. Теперь я нашел ответ, поэтому я собираюсь опубликовать его, если кто-то еще найдет его полезным.
Я хотел сделать динамическую глобальную замену, где строки замены основаны на исходных совпадениях.
например, чтобы прописать первую букву всех слов (например, "cat sat mat" в "Cat 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"
вы можете сделать, используя следующий метод
посмотреть этой функции:
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}
здесь
- g-глобальная замена с учетом регистра
- GI является блобальной заменой без учета регистра
вы можете проверить эту ссылку JSBIN
вы можете использовать следующее решение для выполнения глобальной замены на строку с переменной внутри ' / ' и '/ g':
myString.replace(new RegExp(strFind, 'g'), strReplace);
Comments