2014-12-03 2 views
1

Я пытаюсь найти документацию о регулярном выражении в Express, но информация в Express API очень скудная. Я пытаюсь выполнить соответствующий ID объекта regex. Этот пример о регулярном выражении приведен в документации Express.Regex in Express.js router

router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){ ... });  

Я попытался следующие в моем маршрутизаторе, и кажется работать нормально.

client.get('/staff/:id([0-9a-fA-F]{24})', function(req, res) { ... }); 

Но есть некоторые различия, которые я не могу понять ...

  • Мой пример окружен в ', пример в API не является. Что означает ? Является ли мое выражение строкой, а не регулярным выражением?
  • Я не использую: /^ или ?$/. Не знаю много о regex Я думаю, это какие-то якоря. Мне это нужно?
  • Я не избегаю \ первой части моего URL /staff/:id. Это что-то, что я должен делать ?

Кроме того, кто-нибудь знает о обширном ресурсе для чтения о регулярных выражениях в маршрутизаторах Express, ... или опциональных параметров или что-то, что я делаю выше ...

+0

Пожалуйста, удалите галочку, так как я думаю мой ответ неверен о части строки. Кажется, что express.js имеет другой способ обработки, когда строка передается. – nhahtdh

+0

Да, я это осознал. Тем не менее, вы дали мне много полезной информации о регулярных выражениях =) –

+0

Часть ': id' должна быть определена с помощью параметра' param' – nhahtdh

ответ

1

Это стоит прочитать исходный код для сопоставления маршрутов, но вот короткая форма.

  • 'abc' - строка JS; /abc/ - это регулярное выражение JS. Строка может использоваться для создания регулярного выражения, которое вы делаете. Так что оба действительны. Чтобы увидеть разницу, попробуйте сделать var re = /abc/ и var re = new RegExp('abc')
  • ^ является стартовым якорем, а $ является завершающим якорем. ^abc будет соответствовать «abc», «abcde», но не «zabcd», потому что ему нужно начало с «abc». abc$ будет соответствовать «abc», «zabc», но не «abcd», потому что ему нужно завершить «abc».
  • , когда вы используете фактическое выражение RegExp, начиная с / и заканчивая /, если вы хотите использовать косые черты в вашем RegExp, вам нужно сбежать от них, иначе как интерпретатор узнает, что это символ косой черты, а не конец вашего RegExp? Если вы используете строку, она знает, что это не так, и вам не нужно бежать.

Для последнего, попробуйте следующее:

"abc".match(/abc/); // works 
"abc".match('/abc/'); // fails because there are no slashes 
"/abc/".match('/abc/'); // works 
"/abc/".match(/abc/); // works because "abc" is in there 

Конечно, вы можете избежать косой черты, если вы так выбираете

"/abc/".match('\/abc\/'); // works 
"abc".match('\/abc\/'); // fails 
Смежные вопросы