Я писал статью о начале работы с регулярными выражениями раньше. Я думал, что был относительно знаком с регулярными выражениями, но сегодня я столкнулся с другой ловушкой. Может быть, это было потому, что я не был достаточно осторожен. Сегодня я сосредоточусь на том, чтобы поделиться с вами группировкой в JavaScript регулярных выражения. Если вы не понимаете регулярных выражений JS, вы можете нажать здесь, чтобы узнать больше.
Группировка довольно широко используется в обычных правилах. Группировка, которую я понимаю, - это пара скобок (), и каждая пара скобок представляет собой группу.
Группирование можно разделить на:
Захват группировки получит результаты соответствующей группировки в виде второго члена и третьего члена в функции, такой как Match Exec. Давайте сначала посмотрим на пример
var reg =/test (/d+)/; var str = 'new Test001 test002'; console.log (str.match (reg)); // ["test001", "001", индекс: 4, вход: "New Test001 test002"]
В коде (/D+) находится группа (некоторые люди также называют это подпаттерном), но все они представляют одинаковое значение. В приведенном выше примере Test001 является результатом точного совпадения.
Тем не менее, сопоставление группы состоит в том, чтобы найти символы, соответствующие суб-паттерн/D+ из всего точного результата совпадения (то есть Test001). Здесь, очевидно, 001.
Но это то, с чем я столкнулся сегодня
var reg =/test (/d)+/; var str = 'new Test001 test002'; console.log (str.match (reg)); // ["test001", "1", индекс: 4, вход: "New Test001 test002"]
Разница в том, что (/D+) изменяется на (/D)+, и весь результат сопоставления все еще остается Test001, но результат первого сопоставления группы отличается.
Давайте посмотрим на их различия
(/D+) Это ситуация группировки, потому что по умолчанию соответствующие шаблоны - это жадные узоры, то есть как можно больше совпадений
Результатом всех матчей /D+ является 001. Затем добавляется пара кронштейнов, что означает группу, поэтому результат сопоставления в первой группе составляет 001.
Давайте посмотрим на (/D)+ во втором примере. Это также жадный рисунок. Во -первых, сначала он сочетается с 0, а затем 0, а также совпадает с концом 1.
Кажется, что в первом примере нет никакой разницы в матче, но группировка (/d) здесь означает сопоставление одного номера.
Согласно моему предыдущему пониманию, результат того, что матч был 0 в начале, было 0, но это понимание неправильно. Поскольку весь матч является жадным рисунком, максимально соответствует
(/d) в группе запечатлет последний соответствующий результат 1
Если это не-зеленого рисунка, он будет соответствовать как можно меньше
var reg =/test (/d)+?/; var str = 'new Test001 test002'; console.log (str.match (reg)); // ["test001", "0", index: 4, вход: "New Test001 test002"]
Таким образом, соответствующий результат (/D) составляет 0. Хотя есть и результаты, которые можно соответствовать позже, вот как можно меньше, чтобы соответствовать как можно меньше
Некапрессившая группировка
var reg =/test (?:/d)+/; var str = 'new Test001 test002'; console.log (str.match (reg)); // ["test001", индекс: 4, вход: "New Test001 test002"]
Некапрессившая группа означает, что в некоторых местах необходима пара скобок, но они не хотят, чтобы это была группировка захвата, что означает, что они не хотят, чтобы эта группа была получена по таким функциям, как Macth Exec.
Обычно добавление?: (?: Шаблон) Внутри кронштейна становится группой без захвата.
Таким образом, в результате матча не будет соответствия контента в результате матча, что означает, что второй элемент отсутствует.
Эта статья посвящена объяснению разницы между (/D+) и (/d)+, которая также является ямой, на которой я наступил сегодня. Если есть какие -либо ошибки, пожалуйста, не стесняйтесь их исправлять.