var regex = /r*/;
var str = "rodriguez";
движок регулярных выражений первый будет пытаться соответствовать r
в rodriguez
слева направо и так есть матч, он потребляет этот матч.
Затем двигатель регулярного выражения пытается сопоставить другой r
, но следующий символ o
, поэтому он останавливается там.
Без глобального флага g
(используется как так var regex = /r*/g;
), двигатель регулярных выражений перестанет искать больше совпадений после выполнения регулярного выражения.
Попробуйте использовать:
var regex = /a*/;
var str = "cabbage";
Матч будет пустая строка, несмотря на наличие a
сек в строке! Это связано с тем, что во-первых, двигатель регулярных выражений пытается найти a
в cabbage
слева направо, но первый символ - c
. Поскольку это не соответствует, регулярное выражение пытается совместить 0 раз. Таким образом, выполняется регулярное выражение, и совпадение заканчивается здесь.
Возможно, стоит упомянуть, что только *
является жадным, что означает, что он сначала попытается сопоставить как можно больше (часть «или больше» из описания), прежде чем пытаться сопоставить 0 раз.
Чтобы получить все r
от rodriguez
, вам потребуется глобальный флаг, как уже упоминалось ранее:
var regex = /r*/g;
var str = "rodriguez";
Вы получите все r
, плюс все пустые строки внутри, так *
также не соответствует «ничего» ,
Спасибо, я понимаю логику этого. –
@robertrocha Добро пожаловать :) – Jerry