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


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

476   11  

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

silmiar post

это регулярное выражение, а не строку. Используйте конструктор для объекта 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

http://jsbin.com/nohuroboxa/edit?html, js, выход

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

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

Comments

    Ничего не найдено.