. Соображаете, как это работает? Часть между скобок совпадает с комментариями, а
>?
делает так, что регулярка совпадёт и со строчками, состоящими из одних пробелов.
Если строка – не комментарий, код проверяет, начинает ли она новую секцию. Если да, он создаёт новый объект для текущей секции, к которому добавляются последующие настройки.
Последняя осмысленная возможность – строка является обычной настройкой, и в этом случае она добавляется к текущему объекту.
Если ни один вариант не сработал, функция выдаёт ошибку.
Заметьте, как частое использование >^
и >$
заботится о том, что выражение совпадает со всей строкой целиком, а не с частью. Если их не использовать, код в целом будет работать, но иногда будет выдавать странные результаты, и такую ошибку будет трудно отследить.
Конструкция >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*/
Ноль или более вхождений