Назначение (. +?) В регулярных выражениях - PullRequest
3 голосов
/ 16 марта 2010

Я немного новичок в этом Regex.

При анализе кода я часто сталкиваюсь с шаблоном .+? или (.+?)

Кажется, я не могу понять значение этого паттерна, используя мои нубистские дедуктивные рассуждения.

Ответы [ 2 ]

13 голосов
/ 16 марта 2010

. означает любой символ (кроме новой строки). + означает один или несколько. ? в данном контексте означает ленивый или не жадный. Это означает, что он будет пытаться соответствовать абсолютному минимуму символов, которые соответствуют квантификатору Пример:

> 'abc'.match(/.+/)
["abc"]
> 'abc'.match(/.+?/)
["a"]
> 'abc'.match(/.*/)
["abc"]
> 'abc'.match(/.*?/)
[""]
5 голосов
/ 16 марта 2010

Это зависит от того, какие у вас знания о шаблонах. Вот объяснение, которое предполагает, что у вас есть какое-то базовое представление о том, что такое регулярные выражения:

  • . соответствует любому символу
  • + означает повторить последний паттерн 1 или более раз
  • пока .+ означает один или несколько символов
  • ? означает ungreedy , что означает, что совпадение прекратится при первом случае.

Краткое объяснение жадности:

/.+X/.exec("aaaXaaaXaaa");
["aaaXaaaX"]
/.+?X/.exec("aaaXaaaXaaa");
["aaaX"]

Как вы можете видеть, символ ? делает поиск несвязным, таким образом сопоставляя его как можно меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...