it-swarm.com.ru

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

но они не работают. Есть идеи?

58
avastreg
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) ;
  }
175
Paolo Bergantino

Для регулярных выражений new RegExp(stringtofind, 'g');. НО. Если «find» содержит символы, которые являются специальными в регулярном выражении, они будут иметь свое регулярное значение. Так что, если вы пытались заменить «.» в 'abc.def' с 'x' вы получите 'xxxxxxx' - упс.

Если все, что вам нужно, это простая замена строки, вам не нужно регулярных выражений! Вот простая строка, заменяющая идиому:

mystring= mystring.split(stringtofind).join(replacementstring);
65
bobince

Регулярные выражения намного медленнее, чем поиск строк. Таким образом, создание регулярного выражения с экранированной строкой поиска не является оптимальным способом. Даже зацикливание строки будет быстрее, но я предлагаю использовать встроенные предварительно скомпилированные методы.

Вот быстрый и чистый способ сделать быструю глобальную замену строки:

sMyString.split(sSearch).join(sReplace);

И это все.

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

Силмиар пост

14
unigogo

Это регулярное выражение, а не строка. Используйте конструктор для объекта RegExp для динамического создания регулярного выражения.

var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');
3
Alex Wayne

Пытаться:

var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);
2
Crescent Fresh

Вы можете использовать следующее решение для выполнения глобальной замены строки с переменной внутри '/' и '/ g':

myString.replace(new RegExp(strFind, 'g'), strReplace);
2
dSd

Динамическая глобальная замена

Я пришел в эту ветку в поисках немного более сложного решения, на которое здесь нет ответа. Теперь я нашел ответ, поэтому я опубликую его на тот случай, если кто-нибудь еще посчитает его полезным.

Я хотел сделать динамическую глобальную замену, где строки замены основаны на исходных совпадениях.

Например, чтобы заглавная буква всех слов (например, "cat sat mat" была превращена в "Cat Sat Mat") с помощью глобальной команды find replace. Вот как это сделать.

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"
1
Robin Winslow

Если вы хотите, чтобы переменные интерполировались, вам нужно использовать объект 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);
1
Philip Reynolds

Вы можете сделать, используя следующий метод

увидеть эту функцию:

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 - глобальная замена с учетом регистра 
  • ги - блобная замена без учета регистра

Вы можете проверить эту ссылку JSBIN 

http://jsbin.com/nohuroboxa/edit?html,js,output

0
Fahad