Регулярное выражение в Javascript для сопоставления маршрутов

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я хотел бы использовать регулярное выражение, чтобы найти соответствующие строки в Javascript.

например:

 /bla/* should match /bla/something
/bla/*/* should match /bla/something/someOhther
/bla/*/*/blub should match /bla/something/someOhther/blub
  

Так что на самом деле * является заполнителем и может быть чем угодно. Я не нашел хорошего способа сделать это в регулярном выражении, но я почти уверен, что есть простой способ .. Не могли бы вы помочь?

Комментарии:

1. Замените * шаблоном класса отрицаемых символов [^/]* ( [^/]* ).

2. не совсем понятно… чему вы хотите точно соответствовать? одно регулярное выражение для всех, одно регулярное выражение для каждого случая?

3. да, я знаю это, но почему-то я не смог получить рабочее (полное) регулярное выражение, которое работает в каждом конкретном случае :-/

4. @M.Be один для всех было бы невероятно

Ответ №1:

Замените / на / и * на .* , и оно должно соответствовать как

 "/bla/something/someOhther".match(//bla/.*/.*/)
  

и преобразуйте ваше входное регулярное выражение в фактическое регулярное выражение, выполнив

 "/bla/*/*".replace(/*/g, ".*").replace(///g, "\/");
  

Редактировать

Чтобы убедиться, что . не соответствует всей строке, замените . на [^/]

 "/bla/something/someOhther".match(/^/bla/[^/]*/[^/]*/$) ; //will match
  

но это не будет соответствовать

 "/bla/something/someOhther/hj".match(/^/bla/[^/]*/[^/]*/$) ; //will not match due to extra /hj
  

и преобразуйте ваше входное регулярное выражение в фактическое регулярное выражение, выполнив

 "/bla/*/*".replace(/*/g, "[^/]*").replace(///g, "\/");
  

Комментарии:

1. потрясающе. не хватает последнего бита. теперь /bla/ something / также соответствует. Я не хочу сопоставлять * с /, но только если есть значение. например, /bla / blub / не должен соответствовать /bla/*/*

2. @Christian попробуйте обновления, это также должно соответствовать вашему сценарию.