Я думаю, что вам нужно \Q$5\E
. Также см. Pattern.quote(s)
, введенные в Java 5.
S Шаблон javadoc для деталей.
Используйте регулярное выражение вместо строки.
app.get(/^\/(.+)/, function(req, res) {
var href = req.params[0]; // regexp's numbered capture group
});
Обратите внимание, что вы не можете использовать синтаксис строки (app.get('/:href(.+)')
), поскольку Express допускает только небольшое подмножество регулярных выражений в строках маршрута и использует эти регулярные выражения в качестве условной проверки для этот конкретный компонент маршрута. Он не захватывает сопоставляемое содержимое в условных выражениях и не позволяет сопоставлять компоненты (части URL, разделенные косой чертой).
Например:
app.get('/:compa([0-9])/:compb([a-z]/')
Этот маршрут совпадает только в том случае, если первый компонент ( compa ) представляет собой одну цифру, а второй компонент ( compb ) это одна буква az.
'/:href(.+)'
говорит: «сопоставлять первый компонент, только если контент является чем-то», что не имеет особого смысла; это поведение по умолчанию в любом случае. Кроме того, если вы изучите источник , вы увидите, что Express фактически заставляет точку в этом условном выражении быть буквальной.
Например, app.get('/:href(.+)')
фактически компилируется в:
/^\/(?:(\.+))\/?$/i
Обратите внимание, что ваш .
сбежал, поэтому этот маршрут будет соответствовать только одному или нескольким периодам.
Вы можете сделать это с помощью маршрутизации регулярных выражений
app.get('/:href(\d+\/\d+\/\d+\/*)', function(req, res) { });
Я не знаю, правильное ли регулярное выражение, но вы поняли идею
ПРАВКА:
I не думаю, что вышеупомянутое работает, но это делает
app.get(/^\/(\d+)\/(\d+)\/(\d+)\/(.*)/, function(req, res) { });
Переход к http://localhost:3000/2012/08/05/hello-i-must-be
доходам req.params = [ '2012', '08', '05', 'hello-i-must-be' ]