Как найти все слова до определённого слова
Допустим есть строка
http://test.com/article/page/5
Как подобрать выражение для поиска всего что находится до /page/5, при этом /page/5 может отсутствовать в строке?
(.+(?:\/page\/[0-9]+)?)(\/page\/[0-9]+)?
https://regex101.com/r/jyz20s/1
И чтобы было две группы:
первая до /page/[0-9]
вторая /page[0-9] если есть эта часть
Ответы (3 шт):
Автор решения: Vadik Sirekanyan
→ Ссылка
Укажите в регулярном выражении начало (^) и конец строки ($), а первую группу сделайте ленивой: .+? вместо .+. Тогда должно получиться что-то вроде этого:
^(.+?)(\/page\/[0-9]+)?$
Автор решения: ΝNL993
→ Ссылка
Можно ещё вот так, чтобы даже если после /page/x/ что-то было, выражение бы срабатывало.
(^.*?)(\/page\/\d+.*|$)
Работает это так:
- Выражение начинается на всё что угодно, это мы заворачиваем в отдельную группу.
- И заканчивается либо на
/page/любоеЧисло/необязательный/путь, либо ни на что (то-есть строка завершается).
Автор решения: ipatev_nn
→ Ссылка
Можно попробовать воспользоваться позитивной группой просмотра вперед:
^.*?(?=\/page\/\d+|$)
Пример на js(из-за интеграции):
const reg = /^.*?(?=\/page\/\d+|$)/gm
const str = `http://test.com/article/page/5
http://test.com/article/nopage/5`
console.log(str.match(reg));