пытаюсь сделать роутер в нодейсе. Большую часть этого составляет URI -> action
, поэтому мне понадобится легко настраиваемый список URI и регулярное выражение их в регулярные выражения для сопоставления с URI запроса.
Simple! Я делал это на PHP миллион раз. Дай или возьми.
Так вот что я делаю (для проверки):
> uri = '/users/#/status/*'
> uri.replace(/\//g, '\\/').replace(/#/g, '(\d+)').replace(/\*/g, '([^/]+)')
Что я делаю: 1) экранирование /
и 2) замена #
на \d+
и 3) замена *
на [^/]+
В Chrome это работает как ожидалось:
< \/users\/(d+)\/status\/([^/]+)
Экранировал /
и заменил #
и *
правильно. Это V8.
В Nodejs:
< \\/users\\/(d+)\\/status\\/([^/]+)
Que !? Каждый /
удваивается? Я либо получил дважды сбежавший /
, либо не избежал /
.
Регулярное выражение верно, верно?
Я использую Chrome 15 dev (V8 javascript) и Node 0.5.8 dev (V8 javascript). Что здесь происходит?
Потенциально интересно
Если я тестирую /^\/users\/(\d+)\/status\/([^/]+)/.test('/users/1/status/x')
, он возвращает true как в Chrome, так и в Node.