Выразительный JavaScript (Хавербеке) - страница 102

. Соображаете, как это работает? Часть между скобок совпадает с комментариями, а >? делает так, что регулярка совпадёт и со строчками, состоящими из одних пробелов.

Если строка – не комментарий, код проверяет, начинает ли она новую секцию. Если да, он создаёт новый объект для текущей секции, к которому добавляются последующие настройки.

Последняя осмысленная возможность – строка является обычной настройкой, и в этом случае она добавляется к текущему объекту.

Если ни один вариант не сработал, функция выдаёт ошибку.

Заметьте, как частое использование >^ и >$ заботится о том, что выражение совпадает со всей строкой целиком, а не с частью. Если их не использовать, код в целом будет работать, но иногда будет выдавать странные результаты, и такую ошибку будет трудно отследить.

Конструкция >if (match = string.match(...)) похожа на трюк, использующий присвоение как условие в цикле >while. Часто вы не уверены, что вызов >match будет успешным, поэтому вы можете получить доступ к результирующему объекту только внутри блока >if, который это проверяет. Чтобы не разбивать красивую цепочку проверок >if, мы присваиваем результат поиска переменной, и сразу используем это присвоение как проверку.

Международные символы

Из-за изначально простой реализации языка, и последующей фиксации такой реализации «в граните», регулярки JavaScript тупят с символами, не встречающимися в английском языке. К примеру, символ «буквы» с точки зрения регулярок JavaScript, может быть одним из 26 букв английского алфавита, и почему-то ещё подчёркиванием. Буквы типа é или β, однозначно являющиеся буквами, не совпадают с >\w (и совпадут с >\W, то есть с не-буквой).

По странному стечению обстоятельств, исторически >\s (пробел) совпадает со всеми символами, которые в Unicode считаются пробельными, включая такие штуки, как неразрывный пробел или монгольский разделитель гласных.

У некоторых реализаций регулярок в других языках есть особый синтаксис для поиска специальных категорий символов Unicode, типа «все прописные буквы», «все знаки препинания» или «управляющие символы». Есть планы по добавлению таких категорий и в JavaScript, но они, видимо, будут реализованы нескоро.

Итог

Регулярки – это объекты, представляющие шаблоны поиска в строках. Они используют свой синтаксис для выражения этих шаблонов.


>/abc/ Последовательность символов

>/[abc]/ Любой символ из списка

>/[^abc]/ Любой символ, кроме символов из списка

>/[0-9]/ Любой символ из промежутка

>/x+/ Одно или более вхождений шаблона >x

>/x+?/ Одно или более вхождений, нежадное

>/x*/ Ноль или более вхождений