#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 попробуйте обновления, это также должно соответствовать вашему сценарию.