JavaScript replace() — заміна в рядку: перше і всі входження


Загальний опис

Метод String.prototype.replace() - це потужний інструмент для роботи з рядками, який дозволяє замінювати підрядки всередині основного рядка на інші рядки. Цей метод особливо корисний для редагування тексту, коригування форматування даних, або модифікації рядків з урахуванням певних умов. Застосування replace() може варіюватися від простих замін тексту до складних маніпуляцій із використанням регулярних виразів.

На базовому рівні, replace() приймає два аргументи: підрядок, який потрібно замінити, та рядок, на який цей підрядок має бути замінений. Наприклад:

let text = "Привіт, світ!";
let newText = text.replace("світ", "друг");
console.log(newText); // Виведе "Привіт, друг!"

String.prototype.replace() також дозволяє використовувати регулярні вирази для більш гнучкої заміни. Це особливо корисно, коли потрібно замінити кілька входжень або здійснювати заміну за складнішими критеріями. Наприклад:

let text = "Яблуко, банан, яблуко";
let newText = text.replace(/яблуко/gi, "апельсин");
console.log(newText); // Виведе "Апельсин, банан, апельсин"

Тут використовується регулярний вираз /яблуко/gi, де g означає глобальну заміну (всі входження), а i - нечутливість до регістру.

Одна з ключових особливостей методу replace() - це те, що він не змінює початковий рядок, а повертає новий з урахуванням зроблених замін. Це означає, що для збереження результату заміни потрібно використовувати нову змінну або перезаписати існуючу.

Також replace() може використовувати функцію як другий аргумент для більш складних замін. Наприклад:

let text = "Розумний має вуха";
let newText = text.replace("вуха", (match) => match.toUpperCase());
console.log(newText); // Виведе "Розумний має ВУХА"

Тут метод replace() використовує функцію, яка перетворює знайдене слово в верхній регістр.

автор: Bond

Як замінити всі входження

replace() із рядком-шуканим замінює лише перше входження — сюрприз номер один цього метода.

Замінити всі можна двома шляхами:

  • replaceAll('а', 'б') — сучасний і найчитабельніший;
  • replace(/а/g, 'б') — регулярний вираз із прапорцем g; єдиний варіант, коли шукане — шаблон, а не точний рядок.

У рядку заміни працюють спецпослідовності: $& — усе знайдене, $1 — перша група дужок регулярного виразу. А другим аргументом може бути функція: вона отримує кожен збіг і повертає заміну — так роблять перетворення, які не записати шаблоном.

Сам рядок replace() не змінює — рядки в JavaScript незмінні взагалі. Він завжди повертає новий рядок, і його треба присвоїти.

автор: NagarD

Порада

Якщо потрібно більше контролю над процесом заміни, використовуйте функцію як другий аргумент у replace(). Це дозволяє вам маніпулювати замінюваним текстом на льоту, наприклад, змінювати регістр букв або додавати додаткові символи.

автор: Bond
Порада

У методі replace() можна використовувати спеціальні символи у строках заміни, такі як $& для вставки знайденого фрагменту. Це особливо корисно, коли потрібно обернути знайдений текст у додаткові символи або HTML-теги.

автор: Bond
Порада

Коли використовуєте регулярні вирази для глобальної заміни, усвідомлюйте, що це може вплинути на всі входження збігів у рядку. Переконайтеся, що ваш шаблон регулярного виразу точно відповідає тому, що ви хочете замінити, щоб уникнути небажаних змін у рядку.

автор: Bond
Порада

Коли вам потрібно замінити більше, ніж один конкретний символ або рядок, використовуйте регулярні вирази. Вони дозволяють визначати шаблони для пошуку, забезпечуючи більшу гнучкість. Наприклад, використання /hello/g як першого аргументу в методі replace() дозволяє замінити всі входження слова "hello" у рядку.

автор: Bond

Синтаксис

replace(pattern, replacement)

Параметри

pattern

Може бути рядком або об'єктом з методом Symbol.replace, зазвичай використовується регулярний вираз. Якщо значення не має методу Symbol.replace, воно буде приведено до рядка.

автор: Bond

replacement

Може бути рядком або функцією, яка визначає, на що замінити відповідні збіги у початковому рядку.

автор: Bond

Повернення

string

Повертає новий рядок, у якому одне, декілька або всі входження шаблону замінені на вказаний замінник. Якщо шаблон виявлений у вихідному рядку, він буде замінений на рядок або результат виконання функції, переданих у якості другого аргументу. Важливо пам'ятати, що оригінальний рядок залишається незмінним, а результатом є новий рядок із внесеними змінами.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1 4 12 5.5
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

У цьому більш складному прикладі ми використовуємо String.prototype.replace() з регулярним виразом для заміни всіх входжень певного слова у тексті, незалежно від регістру. Регулярні вирази роблять replace() значно потужнішим і гнучкішим інструментом.

// Визначення вихідного рядка
let text = "Роза - це квітка. Роза чудово пахне.";

// Створення регулярного виразу для пошуку слова "роза" (незалежно від регістру)
let regex = /роза/gi;

// Заміна всіх входжень "роза" на "тюльпан"
let newText = text.replace(regex, "тюльпан");

console.log(newText);
// Виведе: "Тюльпан - це квітка. Тюльпан чудово пахне."
автор: Bond

У цьому прикладі користувач вводить оригінальний рядок, рядок, який потрібно замінити, і новий рядок для заміни. Після натискання кнопки, скрипт замінює підрядок на новий рядок у вказаному рядку, і результат відображається на сторінці. Це демонструє динамічну взаємодію з методом replace() у JavaScript.

автор: Bond

У цьому прикладі ми використовуємо метод String.prototype.replace() для заміни слова у рядку. Цей метод чудово підходить для простих замін, наприклад, коли потрібно замінити певне слово або фразу на іншу.

// Визначення вихідного рядка
let originalString = "Привіт, світ!";

// Заміна слова "світ" на "всесвіт"
let replacedString = originalString.replace("світ", "всесвіт");

console.log(replacedString);
// Виведе: "Привіт, всесвіт!"
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід