У JavaScript є replace()
метод об'єкта String для заміни підрядків. Цей метод може мати два аргументи. Перший аргумент може представляти собою рядок або шаблон регулярного вираження (об'єкт regExp), а другий аргумент може бути рядком або функцією. Приклад replace()
методу, що має обидва рядкові аргументи, показаний нижче.
var text = 'one, two, three, one, five, one';
var new_text = text.replace('one', 'ten');
console.log(new_text) //ten, two, three, one, five, one
Зауважте, що якщо першим аргументом є рядок, заміняється лише перше виникнення підрядка, як у наведеному вище прикладі. Для заміни всіх випадків підрядки потрібно надати регулярний вираз g
(глобальний) прапор. Якщо ви не надасте глобальний прапор, лише перше виникнення підрядки буде замінено, навіть якщо ви надаєте регулярний вираз у якості першого аргументу. Тож давайте замінимо всі випадки one
у наведеному вище прикладі.
var text = 'one, two, three, one, five, one';
var new_text = text.replace(/one/g, 'ten');
console.log(new_text) //ten, two, three, ten, five, ten
Зауважте, що ви не загортаєте шаблон звичайного виразу в лапки, що зробить його рядком не об'єктом 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) //ten, two, three, ten, five, ten
Ви можете мати більше контролю над текстом заміни, використовуючи функцію як другий аргумент.
str_replace
також приймає два масиви однакової довжини, де кожна рядок у першому масиві замінюється на рядок у другому масиві на той самий індекс. Будь ласка, дивіться stackoverflow.com/a/5069776/296430 про єдину правильну функцію, яку я знайшов поки що, що імітує саме таку поведінку у javascript.