String.replace() в JavaScript — заміна в рядку


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

Метод 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.

HTML

<header>
  <h2 class="title">String.prototype.replace()</h2>
  <p class="description">Замінює входження підрядка в рядку на інший рядок.</p>
</header>
<main>
  <div class="result">
    <input type="text" id="originalString" placeholder="Введіть початковий рядок" />
    <input type="text" id="stringToReplace" placeholder="Рядок для заміни" />
    <input type="text" id="replacementString" placeholder="Новий рядок" />
    <button onclick="replaceString()">Замінити</button>
    <p id="output">Результат: </p>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

input[type="text"] {
  margin: 10px 0;
  padding: 8px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

button {
  padding: 10px 15px;
  background-color: #4CAF50;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

button:hover {
  background-color: #45a049;
}

#output {
  margin-top: 15px;
  font-weight: bold;
}

JS

function replaceString() {
  var original = document.getElementById('originalString').value;
  var toReplace = document.getElementById('stringToReplace').value;
  var replacement = document.getElementById('replacementString').value;
  var result = original.replace(toReplace, replacement);
  document.getElementById('output').innerHTML = 'Результат: ' + result;
}
//# sourceURL=pen.js
автор: Bond

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

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

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

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

Коментарі

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

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

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

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

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