2016-03-09 3 views
0

Я немного запутался о примере на этой странице: http://expressjs.com/en/guide/routing.htmlКак интерпретируется это Regex?

This route path will match abcd, abxcd, abRANDOMcd, ab123cd, and so on. 


app.get('/ab*cd', function(req, res) { 
    res.send('ab*cd'); 
}); 

После ввода этого примера в здесь: http://regexr.com/

Я не могу воссоздать такое же поведение и матч abxyzcd ,

Почему это и какова разница в регулярном выражении и способ его интерпретации?

+1

Что-то странное там. Описания других примеров выглядят хорошо, но это не то, как звезда работает в регулярных выражениях. 'ab * cd' должен соответствовать' acd', 'abcd',' abbcd' и т. д., но ** не ** 'abxcd',' abRANDOMcd' или 'ab123cd'. –

ответ

1

что вы там получили, это не регулярное выражение, а строка, содержащая подстановочный знак. Мое регулярное выражение не очень хорошее, но я считаю, что * интерпретируется так же, как .* в регулярном выражении.

Как говорится в ссылке, которую вы предоставили:

Вот некоторые примеры путей маршрутизации на основе строк.

В то время как дальше вы видите:

Примеры путей маршрутизации на основе регулярных выражений:

Таким образом, существует два основных способа создания модели в маршрутах :)

1

В нормальных регулярных * означает, как выражения, что предыдущий символ может соответствовать 0 или более раз, поэтому с регулярным выражением вы дали, вы могли бы соответствовать abbcd и abbbbcd т.д.

Если вы хотите, чтобы соответствовать abrandomcd вы могли бы использовать regex ab.*cd The. означает совпадение любого символа, а звезда означает любое количество из них.

Насколько я могу судить, пример на этой странице expressjs использует другую форму регулярного выражения, чем regexr или другой нормальный движок.

Это подчеркивается в тексте

Символов?, +, * И() являются подмножествами их регулярного выражения прототипов. Дефис (-) и точка (.) Интерпретируются буквально по строковым дорожкам.

Найдено на странице.

2

Похоже, что синтаксис ExpressJS отличается от стандартного синтаксиса RegEx.

Это версия RegEx из этой модели:

Lazy

Если вы не используете ленивый модификатор ("?"), вы получите этот результат:

Non-Lazy

Я рекомендую дополнительно изучить синтаксис ExpressJS, чтобы узнать h ow они различают ленивый & нелатный поиск.

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