Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нежадный поиск не хочет работать в String.match() (https://javascript.ru/forum/misc/40905-nezhadnyjj-poisk-ne-khochet-rabotat-v-string-match.html)

Почемучкин 23.08.2013 21:01

Нежадный поиск не хочет работать в String.match()
 
Почему в match не хочет работать нежадная директива типа .*? или .+?
Смотрите:

alert( "1245;12345".match( /1.*?3.*?5/ )  )

результат:   ["1245;12345"]

alert( "1245;12345".match( /(1.*?3.*?5)/ )  )

результат:   ["1245;12345", "1245;12345"]

alert( "1245;12345".replace( /^.*(1.*?3.*?5).*$/, "$1" )  )

результат:   "12345" (правильно)

А от match() ведь ожидалось то, что выдает replace()

То есть нежадный оператор работает в replace(), но не работает в match(). В чем же дело?

Яростный Меч 23.08.2013 21:50

Причина в том, что первая звездочка в регексе для замены - "жадная", и она забирает "1245;"

Почемучкин 23.08.2013 22:02

ok, но почему не работает в случае без жадной звездочки?
Нежадный оператор указан явно, почему же он не работает?

Яростный Меч 23.08.2013 22:15

"жадность" распространяется вправо, но не влево.

т.е. эффект проявился бы в сравнении вариантов

"12345;1245;".match( /1.*?3.*?5/ )

результат ["12345"]

и

"12345;1245;".match( /1.*?3.*5/ )

результат ["12345;1245"]


Часовой пояс GMT +3, время: 14:13.