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

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

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

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

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

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

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

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

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

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

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

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

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

Если вам нужно обеспечить поддержку устаревшего кода, 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.