Регулярное выражение для поиска не-ASCII символов в JS
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы обнаружить не-ASCII символы, воспользуйтесь регулярным выражением /[^\x00-\x7F]+/
:
const nonAsciiRegex = /[^\x00-\x7F]+/; // Не упустит ни одного не-ASCII символа.
console.log("Café • テスト".match(nonAsciiRegex)); // ["Café • テスト"]
Этот код поможет вам найти символы за рамками ASCII, включая международные символы и эмодзи.
Обработка Unicode в JavaScript
JavaScript идеально подходит для работы с Unicode-символами, что важно в международном контексте. Символы, превышающие базовый набор ASCII (0x7F), включают в себя различные языки, специальные символы и эмодзи.
От общего к конкретному
Чтобы обработать Unicode-символы различных языков, используйте экранирование свойств Unicode через \p{L}
:
const unicodeRegex = /\p{L}+/u; // Захватит все буквенные символы во всех языках!
console.log("안녕하세요".match(unicodeRegex)); // ["안녕하세요"]
Не забывайте о флаге u
, который необходим для работы с Unicode.
Библиотеки для работы со старым кодом
Если вам нужно обеспечить поддержку устаревшего кода, XRegExp приходит на помощь. Эта библиотека расширяет стандартные возможности регулярных выражений JavaScript и обеспечивает поддержку свойств Unicode даже в старых средах:
const XRegExp = require('xregexp');
let regex = XRegExp('\\p{L}+'); // Теперь понятно, как прочитать слово Résumé.
console.log(regex.test('Résumé')); // true
Подбор символов по языковым характеристикам
Применение конкретных диапазонов из Unicode-таблиц кодов может быть полезно при поиске Unicode-символов определённых языков, таких как кириллица или китайские иероглифы:
const chineseCharsRegex = /[\u4e00-\u9fa5]+/; // Открываем мир китайской письменности!
console.log("你好".match(chineseCharsRegex)); // ["你好"]
Визуализация
Можно представить свои ASCII и не-ASCII символы как обычные и экзотические фрукты:
| Яблоки (ASCII) | Экзотические фрукты (не-ASCII) |
| ------------------------- | -------------------------------- |
| 🍎 🍏 🍎 🍏 🍎 🍏 🍎 🍏 🍎 🍏 | 🥭 🍍 🥥 |
Используйте регулярное выражение /[^\x00-\x7F]+/
для "обнаружения" экзотических фруктов:
const exoticFruitDetector = /[^\x00-\x7F]+/; // Активируем Фруктового Ниндзя
console.log(exoticFruitDetector.test("Обычное яблоко 🍏")); // false
console.log(exoticFruitDetector.test("Экзотический манго 🥭")); // true
Итог — корзина с органическими яблоками, в которой нет следа не-ASCII символов.
Совместимость с браузерами и транспиляция
Поддержка в разных версиях
Перед тем как погрузиться в мир работы с Unicode в регулярных выражениях, убедитесь в поддержке этой функциональности браузерами. Последние версии обеспечивают корректную работу, а вот старые могут вызвать проблемы.
Трансформация для обеспечения совместимости
Для поддержки Unicode-регулярных выражений в устаревших JavaScript-средах используйте транспиляцию с помощью таких инструментов, как regexpu или Babel:
npm install --save-dev babel-plugin-transform-unicode-regex // Подключаем трансформатор Unicode.
Чтобы включить плагин, добавьте его в конфигурацию Babel:
{
"plugins": ["transform-unicode-regex"] // Готовы к работе с Unicode!
}
Продвинутые подходы и лучшие практики
Тестирование — залог успеха
Тщательное тестирование регулярных выражений на разнообразных данных обеспечивает их надёжную работу и корректное поведение.
Чистота и понятность кода
Для того чтобы код был аккуратным и понятным, целесообразно инкапсулировать регулярные выражения в функции. Например, функция grabNonAscIIWords(text)
может быть чрезвычайно полезной:
function grabNonAscIIWords(text) {
return text.match(/[\p{L}-]+/gu) || []; // Включено обнаружение не-ASCII символов!
}
console.log(grabNonAscIIWords("El niño играл в σκάκι")); // ["niño", "σκάκι"]
Ассистенты и инструментарий
Отладка и тестирование регулярных выражений удобно проводить на платформах вроде regex101, которые обеспечивают реальновременный анализ и помогают понять, как работает каждый элемент шаблона.
Полезные материалы
- RegExp – JavaScript | MDN — обширный справочник по RegExp в JavaScript от Mozilla.
- Регулярные выражения – Unicode-символы и свойства — для понимания Unicode-свойств в регулярных выражениях.
- Как использовать Unicode-регулярные выражения в JavaScript? – Stack Overflow — дискуссия о практическом применении Unicode-регулярок в JavaScript.
- regex101: создание, тестирование и отладка регулярных выражений — онлайн-тестирование и отладка JavaScript-регулярных выражений.
- Технический стандарт языка ECMAScript® 2024 — официальная спецификация, описывающая работу с регулярными выражениями и не-ASCII символами.
- Регулярные выражения в JavaScript: XRegExp — библиотека XRegExp, расширяющая стандартные возможности JavaScript-регулярок с лучшей поддержкой Unicode.