Это зависит от того, какие у вас знания о шаблонах. Вот объяснение, которое предполагает, что у вас есть какое-то базовое представление о том, что такое регулярные выражения:
.
соответствует любому символу
+
означает повторить последний паттерн 1 или более раз
- пока
.+
означает один или несколько символов
?
означает ungreedy , что означает, что совпадение прекратится при первом случае.
Краткое объяснение жадности:
/.+X/.exec("aaaXaaaXaaa");
["aaaXaaaX"]
/.+?X/.exec("aaaXaaaXaaa");
["aaaX"]
Как вы можете видеть, символ ?
делает поиск несвязным, таким образом сопоставляя его как можно меньше.