Удаление всех знаков препинания из строки в JavaScript
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для очистки строки от знаков препинания примените метод .replace()
вместе с корректно подобранным регулярным выражением:
const cleanString = "Пример строки, с пунктуацией!".replace(/[^\w\s]|_/g, "");
Данный код извлекает и удаляет все символы, не являющиеся буквами, цифрами или пробелами.
Разбираемся в строении регулярного выражения
Для составления эффективного шаблона регулярного выражения важно знать его элементы:
\w
включает буквы, цифры и символ подчёркивания.\s
обозначает любые пробелы, табуляцию, переносы строк.- Комбинация
[^\w\s]
отфильтровывает все лишние символы, в особенности знаки препинания. - Символ подчёркивания
_
также можно исключить, если он вам не нужен.
Учитываем пунктуацию в Unicode
Если вы работаете со строками, содержащими символы Unicode, модифицированный метод поможет удалить не только ASCII-пунктуацию, но и обширный набор других символов:
const cleanUnicodeString = "Пример строки—теперь с Unicode! 🎉".replace(/[\p{P}\p{S}]/gu, "");
// К сожалению, эмодзи также будут удалены.
Помните о использовании флага u
для поддержки Unicode и удостоверьтесь, что ваша среда поддерживает ECMAScript 2018 или более свежую версию.
Удаляем лишние пробелы
Убираем излишние пробелы, сводя их к минимуму:
const singleSpacedString = cleanString.replace(/\s+/g, " ");
// Мы не любим беспорядок, не так ли?
За пределами ASCII: работаем с Unicode
Текст на различных языках может требовать обработки других блоков Unicode, от классической пунктуации до дополнительных знаков препинания:
const unicodePunctuationStrippedString = text.replace(/[\u2000-\u206F\u2E00-\u2E7F]/g, "");
Сохраняем определённые символы
Если вы хотите оставить в тексте некоторые символы, например апострофы, укажите это в шаблоне регулярного выражения:
const stringWithApostrophes = "They're avoiding the punctuation purge!".replace(/[^\w\s']|_/g, "");
Точность: удаление определённых символов с особым вниманием
Если нужно уточнить список удаляемых знаков препинания, вы можете перечислить их в шаблоне выражения:
const onlySpecificPunctuationRemoved = text.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "")
.replace(/\s{2,}/g, ' ');
// Вот так, знаки препинания, вас тоже касается.
Визуализация
Давайте посмотрим на преобразование строки в процессе удаления пунктуации:
До: "Привет, мир! Как дела у тебя? 👽"
Применяем регулярное выражение для очистки:
const sculpture = "Привет, мир! Как дела у тебя? 👽";
console.log(sculpture.replace(/[^\w\s]|_/g, "")
.replace(/\s+/g, " "));
// 'Они не позвонили домой достаточно быстро. 👽'
Результат выглядит так:
После: "Привет мир Как дела у тебя 👽"
Регулярные выражения помогают избавиться от всего лишнего, оставляя при этом только необходимые символы.
Танцы с современным JS: ES2018 и далее
В последних версиях JavaScript появились улучшения в работе с регулярными выражениями, включая выделение Unicode-пунктуации:
const modernStringSpa = "Строка — теперь свежа и без Unicode! 😄".replace(/[\p{P}\p{S}]/gu, "");
// К сожалению, эмодзи здесь не пройдут.
Обратите внимание, что для этого требуется поддержка ECMAScript 2018 (ES9) или более поздних версий.
Проверка результатов: обязательный этап
Перед внедрением регулярных выражений в функциональность приложения необходимо провести детальную проверку:
- Используйте онлайн-сервисы, например, regex101, для создания и отладки регулярных выражений.
- Разработайте детальные юнит-тесты для проверки корректности обработки строк в приложениях.
Полезные материалы
- Регулярные выражения в JavaScript на MDN — подробное руководство и справочник.
- regex101 — интерактивный инструмент для создания и тестирования регулярных выражений.
- Быстрый старт по регулярным выражениям — краткий и доступный справочник для начинающих.
- Шаблоны и флаги — углублённое изучение шаблонов сопоставления и флагов в JavaScript.
- GitHub – TomFrost/Jexl — продвинутые возможности для парсинга строк и выражений.
- ECMAScript 6: Новые возможности — каk упростить обработку строк с помощью шаблонных литералов ES6.