Регулярные выражения
Шаблон, который прогоняют по тексту, и есть регулярное выражение. /tea/ проверяет, встречается ли tea. replace возвращает новую строку и ставит на это место mint. На странице note равен Order: tea, а видимая строка — true / Order: mint.
Карта хранила, эта страница ищет
Страница карты остановилась на lida / mint / 2. Там было хранение. Здесь гостя не сохраняют. Ищут внутри строки. Неудачный поиск возвращает false или null и ничего не бросает.
Узор уже внутри, или его нет
В lemon узора нет, поэтому /tea/.test("lemon") даёт false. В mint tea он уже сидит, поэтому /tea/.test("mint tea") даёт true. Флаг i не смотрит на регистр, и /tea/i совпадает с Tea.
console.log(/tea/.test("mint tea"));
console.log(/tea/.test("lemon"));
В журнале сначала true, потом false. Точка — это любой один символ, кроме перевода строки, поэтому /t.a/ тоже совпадает с tea. Настоящую точку пишут обратной косой чертой и точкой: .
Потребовать всю строку
^ значит начало, $ значит конец. /^tea$/ принимает tea и отвергает mint tea. Без этих меток /tea/ срабатывает и внутри более длинной заметки.
console.log(/^tea$/.test("tea"));
console.log(/^tea$/.test("mint tea"));
Журнал снова true, затем false. Буквы в mint tea есть, но целиком это не tea.
Каждая копия, затем новая строка
Флаг g меняет сбор: match с g возвращает каждую копию. replace с g меняет каждую копию и возвращает новую строку. note остаётся прежним, пока результат не присвоен.
const note = "tea and tea";
console.log(note.match(/tea/g));
console.log(note.replace(/tea/g, "mint"));
console.log(note);
Журнал match — массив из двух строк tea. Журнал replace — mint and mint. Третий журнал всё ещё tea and tea, потому что replace не менял note. Без g меняется только первое tea. Если совпадений нет, match возвращает null, а не пустой массив.
Форма ответа выбирает метод
Бери метод по форме ответа, который нужен.
📊 Что возвращает каждый метод
| Метод | Форма ответа | На этой заметке |
|---|---|---|
/tea/.test(note) |
true или false | true для Order: tea |
note.match(/tea/) |
массив одного совпадения или null | слово tea и его место |
note.match(/tea/g) |
каждая копия или null | две копии в tea and tea |
note.replace(/tea/, "mint") |
новая строка | Order: mint |
test — это да или нет. match отдаёт куски. replace отдаёт переписанный текст. Чтобы текст остался, присвой его.
Страница пишет оба результата
Страница проверяет Order: tea, меняет напиток и записывает оба результата.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const note = "Order: tea";
const found = /tea/.test(note);
const next = note.replace(/tea/, "mint");
document.querySelector("#line").textContent = found + " / " + next;
</script>
</body>
</html>
Строка читается true / Order: mint. Сама note по-прежнему Order: tea. lida / mint / 2 была страницей карты.
Пять коротких шагов
- Проверь mint tea шаблоном /tea/. Результат true.
- Проверь lemon шаблоном /tea/. Результат false.
- Проверь mint tea шаблоном /^tea$/. Результат false.
- Сопоставь tea and tea с /tea/g. Длина массива равна 2.
- Прочитай страницу. Строка — true / Order: mint.
Ошибки и то, что стоит запомнить
Без ^ и $ шаблон совпадает с куском, а не со всей заметкой. replace не правит оригинал.
- Не читай null.length, если match ничего не нашёл
- Не жди, что replace изменит note на месте
- Не ставь g на выражение, которое снова используешь с test: оно помнит, где остановилось
- Настоящую точку пиши обратной косой чертой и точкой
- Не читай строку как lida / mint / 2
Запомнить
- test отвечает true или false
- /^tea$/ принимает только всю строку tea
- match с g перечисляет каждую копию или возвращает null
- replace возвращает новую строку
- строка страницы — true / Order: mint
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху