В JavaScript есть replace()
метод объекта String для замены подстрок. У этого метода может быть два аргумента. Первый аргумент может быть строкой или шаблоном регулярного выражения (объект regExp), а второй аргумент может быть строкой или функцией. Пример replace()
метода, имеющего оба строковых аргумента, показан ниже.
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text)
Обратите внимание, что если первым аргументом является строка, заменяется только первое вхождение подстроки, как в приведенном выше примере. Чтобы заменить все вхождения подстроки, вам необходимо предоставить регулярное выражение с g
(глобальным) флагом. Если вы не предоставите глобальный флаг, будет заменено только первое вхождение подстроки, даже если вы укажете регулярное выражение в качестве первого аргумента. Итак, давайте заменим все вхождения one
в приведенном выше примере.
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text)
Обратите внимание, что вы не заключаете шаблон регулярного выражения в кавычки, которые сделают его строкой, а не объектом regExp. Чтобы выполнить замену без учета регистра, вам необходимо предоставить дополнительный флаг, i
который делает шаблон без учета регистра. В этом случае указанное выше регулярное выражение будет /one/gi
. Обратите внимание на i
добавленный здесь флаг.
Если второй аргумент имеет функцию и есть совпадение, функция передается с тремя аргументами. Аргументы, которые получает функция, - это совпадение, позиция совпадения и исходный текст. Вам нужно вернуть то, чем нужно заменить это совпадение. Например,
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, function(match, pos, text){
return 'ten';
});
console.log(new_text)
Вы можете лучше контролировать заменяющий текст, используя функцию в качестве второго аргумента.
str_replace
также принимает два массива одинаковой длины, где каждая строка в первом массиве заменяется строкой во втором массиве с тем же индексом. Пожалуйста, посетите stackoverflow.com/a/5069776/296430, чтобы узнать о единственной правильной функции, которую я нашел до сих пор, которая имитирует это точное поведение в javascript.