2014-12-17 3 views
1

Я пытаюсь определить маршрут в выражении js, который принимает неизвестное количество N параметров. Она должна соответствовать следующие маршруты, захватив все цифры группы:Переменная величина params express js

/Объем

/сфера/1/12

/сфера/1/12/123

т.д.

Я написал регулярное выражение для сопоставления n-количества чисел следующим образом:

/(?:\/?(\d+)\/?)/g 

Глобальный/g, похоже, не разрешен, см. (The regex parser of express js on github). Я здесь что-то не так? Я мог бы решить эту проблему очень некрасиво и грязно, делая что-то вроде:

^\/scope\/?(\d+)?\/?(\d+)?\/?(\d+)? 

Но это не динамический, чувствует себя грязным и если добавить более глубокие уровни обзорного я всегда нужно будет добавить больше/(\ d +) регулярное выражение? частей, которая является моделью, которая не соответствует моей бизнес-логике. Я уверен, что должен быть лучший способ ...

Хорошо, после обсуждения с @vks, который был полезен, но, к сожалению, не отвечая на вопрос, мы пришли к выводу, что это не проблема с регулярным выражением. С модификатором \ g регулярное выражение, фиксирующее все группы цифр, может быть легко записано, даже в javascripts очень ограниченный механизм регулярных выражений.

Теперь вопрос становится более четко сформулированным: поскольку expressjs не позволяет полному регулярному выражению от начала до конца, а скорее охватывает регулярное выражение, которое вы используете в маршруте в его собственном начале и конце регулярного выражения, не позволяя/g модификаторам , каков идиоматический способ выражения этой проблемы?

ответ

1
^\/scope(?:\/\d+)*$ 

Вы можете попробовать это. Смотрите демоверсию.

https://regex101.com/r/eZ0yP4/30

+0

Проблема с этим состоит в том, что он соответствует только последний параметр. https://regex101.com/r/eI9pV0/1 (см. совпадения в правом углу) – Quant

+0

@Quant см. здесь https://regex101.com/r/eZ0yP4/30 – vks

+0

Извините, матчи действительно правильные. Проблема заключается в * захвате * групп цифр. В expressjs, насколько я понимаю, вам нужны все параметры, чтобы быть в() группах захвата. (Кроме того, если вы видите предоставленную ссылку github, я боюсь, что не могу установить глобальный флаг) – Quant

Смежные вопросы