Подтвердить что ты не робот

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

но они не работают. Любые идеи?

4b9b3361

Ответ 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);

Ответ 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