Регулярное выражение для поиска не-ASCII символов в JS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы обнаружить не-ASCII символы, воспользуйтесь регулярным выражением /[^\x00-\x7F]+/:

JS
Скопировать код
const nonAsciiRegex = /[^\x00-\x7F]+/;  // Не упустит ни одного не-ASCII символа.
console.log("Café • テスト".match(nonAsciiRegex)); // ["Café • テスト"]

Этот код поможет вам найти символы за рамками ASCII, включая международные символы и эмодзи.

Кинга Идем в IT: пошаговый план для смены профессии

Обработка Unicode в JavaScript

JavaScript идеально подходит для работы с Unicode-символами, что важно в международном контексте. Символы, превышающие базовый набор ASCII (0x7F), включают в себя различные языки, специальные символы и эмодзи.

От общего к конкретному

Чтобы обработать Unicode-символы различных языков, используйте экранирование свойств Unicode через \p{L}:

JS
Скопировать код
const unicodeRegex = /\p{L}+/u; // Захватит все буквенные символы во всех языках!
console.log("안녕하세요".match(unicodeRegex)); // ["안녕하세요"]

Не забывайте о флаге u, который необходим для работы с Unicode.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Библиотеки для работы со старым кодом

Если вам нужно обеспечить поддержку устаревшего кода, XRegExp приходит на помощь. Эта библиотека расширяет стандартные возможности регулярных выражений JavaScript и обеспечивает поддержку свойств Unicode даже в старых средах:

JS
Скопировать код
const XRegExp = require('xregexp');
let regex = XRegExp('\\p{L}+'); // Теперь понятно, как прочитать слово Résumé.
console.log(regex.test('Résumé')); // true

Подбор символов по языковым характеристикам

Применение конкретных диапазонов из Unicode-таблиц кодов может быть полезно при поиске Unicode-символов определённых языков, таких как кириллица или китайские иероглифы:

JS
Скопировать код
const chineseCharsRegex = /[\u4e00-\u9fa5]+/; // Открываем мир китайской письменности!
console.log("你好".match(chineseCharsRegex)); // ["你好"]

Визуализация

Можно представить свои ASCII и не-ASCII символы как обычные и экзотические фрукты:

Markdown
Скопировать код
| Яблоки (ASCII)            | Экзотические фрукты (не-ASCII)   |
| ------------------------- | -------------------------------- |
| 🍎 🍏 🍎 🍏 🍎 🍏 🍎 🍏 🍎 🍏 |             🥭 🍍 🥥              |

Используйте регулярное выражение /[^\x00-\x7F]+/ для "обнаружения" экзотических фруктов:

JS
Скопировать код
const exoticFruitDetector = /[^\x00-\x7F]+/; // Активируем Фруктового Ниндзя
console.log(exoticFruitDetector.test("Обычное яблоко 🍏")); // false
console.log(exoticFruitDetector.test("Экзотический манго 🥭"));  // true

Итог — корзина с органическими яблоками, в которой нет следа не-ASCII символов.

Совместимость с браузерами и транспиляция

Поддержка в разных версиях

Перед тем как погрузиться в мир работы с Unicode в регулярных выражениях, убедитесь в поддержке этой функциональности браузерами. Последние версии обеспечивают корректную работу, а вот старые могут вызвать проблемы.

Трансформация для обеспечения совместимости

Для поддержки Unicode-регулярных выражений в устаревших JavaScript-средах используйте транспиляцию с помощью таких инструментов, как regexpu или Babel:

Bash
Скопировать код
npm install --save-dev babel-plugin-transform-unicode-regex // Подключаем трансформатор Unicode.

Чтобы включить плагин, добавьте его в конфигурацию Babel:

json
Скопировать код
{
  "plugins": ["transform-unicode-regex"] // Готовы к работе с Unicode!
}

Продвинутые подходы и лучшие практики

Тестирование — залог успеха

Тщательное тестирование регулярных выражений на разнообразных данных обеспечивает их надёжную работу и корректное поведение.

Чистота и понятность кода

Для того чтобы код был аккуратным и понятным, целесообразно инкапсулировать регулярные выражения в функции. Например, функция grabNonAscIIWords(text) может быть чрезвычайно полезной:

JS
Скопировать код
function grabNonAscIIWords(text) {
  return text.match(/[\p{L}-]+/gu) || [];  // Включено обнаружение не-ASCII символов!
}

console.log(grabNonAscIIWords("El niño играл в σκάκι")); // ["niño", "σκάκι"]

Ассистенты и инструментарий

Отладка и тестирование регулярных выражений удобно проводить на платформах вроде regex101, которые обеспечивают реальновременный анализ и помогают понять, как работает каждый элемент шаблона.

Полезные материалы

  1. RegExp – JavaScript | MDN — обширный справочник по RegExp в JavaScript от Mozilla.
  2. Регулярные выражения – Unicode-символы и свойства — для понимания Unicode-свойств в регулярных выражениях.
  3. Как использовать Unicode-регулярные выражения в JavaScript? – Stack Overflow — дискуссия о практическом применении Unicode-регулярок в JavaScript.
  4. regex101: создание, тестирование и отладка регулярных выражений — онлайн-тестирование и отладка JavaScript-регулярных выражений.
  5. Технический стандарт языка ECMAScript® 2024 — официальная спецификация, описывающая работу с регулярными выражениями и не-ASCII символами.
  6. Регулярные выражения в JavaScript: XRegExp — библиотека XRegExp, расширяющая стандартные возможности JavaScript-регулярок с лучшей поддержкой Unicode.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какое регулярное выражение нужно использовать для поиска не-ASCII символов в JavaScript?
1 / 5