ECMAScript 2018 вводит именованные группы захвата в регулярные выражения JavaScript.
Если вам требуется поддержка старых браузеров, вы можете делать все с обычными (нумерованными) группами захвата, которые вы можете делать с именованнымизахват групп, вам просто нужно следить за числами - что может быть громоздким, если меняется порядок захвата группы в вашем регулярном выражении.
Есть только два «структурных» преимущества именованных групп захвата, о которых я могу думать:
В некоторых разновидностях регулярных выражений (.NET и JGSoft, насколько я знаю), вы можете использовать одно и то же имя для разных групп в вашем регулярном выражении ( см. здесь пример, где это имеет значение ).Но большинство разновидностей регулярных выражений в любом случае не поддерживают эту функцию.
Если вам нужно обратиться к пронумерованным группам захвата в ситуации, когда они окружены цифрами, вы можете столкнуться с проблемой.Допустим, вы хотите добавить ноль к цифре и поэтому хотите заменить (\d)
на $10
.В JavaScript это будет работать (если в вашем регулярном выражении меньше 10 групп захвата), но Perl будет думать, что вы ищете номер обратной ссылки 10
вместо числа 1
, за которым следует 0
.В Perl вы можете использовать ${1}0
в этом случае.
Кроме того, именованные группы захвата являются просто "синтаксическим сахаром".Это помогает использовать группы захвата только тогда, когда они вам действительно нужны, и использовать группы без захвата (?:...)
во всех других обстоятельствах.
Большая проблема (на мой взгляд) с JavaScript состоит в том, что он не поддерживает многословныйрегулярные выражения, которые значительно упростили бы создание читаемых сложных регулярных выражений.
Библиотека XRegExp Стива Левитана решает эти проблемы.