Как сделать так, чтобы ленивый поиск регулярных выражений устанавливал приоритеты одного совпадения над другим? - PullRequest
0 голосов
/ 08 мая 2018

Учитывая такую ​​строку, как "happy days", я бы хотел иметь возможность сопоставлять "дни" как главный приоритет и прекращать сопоставление, если я его получу. Если нет, я бы хотел соответствовать «счастливому» и тому, что последует за ним. Так, например, "happy dogs" вернет совпадение "счастливые собаки", а "happy days" просто вернет "дни". Я думал попробовать что-то вроде (days|happy\s*\w*)?. Идея заключалась в том, что «дни» были на первом месте и быстро совпадали и выходили (так как мы в ленивом режиме). Но вместо этого он соответствует полному «счастливым дням». Как я могу достичь этой функциональности?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы также можете использовать отрицательный прогноз:

console.log("happy days".match(/days|happy(?!.*days.*).*/)[0])
console.log("happy dogs".match(/days|happy(?!.*days.*).*/)[0])
0 голосов
/ 08 мая 2018

В этом конкретном случае вы должны сначала использовать входную строку с жадной точкой, а затем заставить двигатель вернуться назад:

^.*(days|happy\s*\w*)

Живая демоверсия

...