Regex для соответствия URL - номер в конце строки, но также совпадают символы в начале строки - PullRequest
1 голос
/ 24 апреля 2019

Мне нужно соответствовать следующему формату URL

/yc/leroy-jenkins-123

Так что мне нужно сопоставить как часть /yc/, так и 123

Я могу сопоставить URL-адрес, когда он /leroy-jenkins-123, со следующим

server.get(/([^-]*)$/, (req, res) => {
    const actualPage = '/profile'
    const queryParams = { id: req.params[0] }
    app.render(req, res, actualPage, queryParams)
})

Так что я могу сопоставить 123 с ([^-]+)$, но как мне сопоставить и часть /yc/?

Ответы [ 2 ]

3 голосов
/ 24 апреля 2019

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

^(\/[^\/]+\/).*?(\d+)$

Regex Demo

Объяснение:

  • ^ - соответствует началу строки
  • (\/[^\/]+\/) - соответствует /, за которым следует любой символ, отличный от /, один или несколько далеесопровождаемый / и фиксирует это значение в group1
  • .*? - допускает необязательное совпадение нуля или более любых символов
  • (\d+)$ - сопоставляет одну или несколько цифр и фиксирует их вgroup2, за которым следует конец строки
1 голос
/ 24 апреля 2019

Просто чередуйте с ^\/\w+\/:

server.get(/([^-]+)$|^\/\w+\//, ...

Также обратите внимание, что вам, вероятно, следует повторить хотя бы один не-тире символ перед концом строки, иначе он может соответствовать пустой строке в конце, например, URL-адрес

/

и ничто другое не будет совпадать, потому что в конце строки есть (по крайней мере) ноль не черточных символов, что может быть нежелательно.

Если группа на самом деле не используется для чего-то, не стесняйтесь оставить это полностью:

server.get(/[^-]+$|^\/\w+\//, ...
...