2013-11-06 3 views
0

Im работает над приложением node.js и im делает сопоставление маршрутизатора.Javascript match eveything, за исключением заданных слов

Мне нужно, чтобы соответствовать всем маршрутам со всеми переменными, кроме тех, которые начинаются с «общественных, статические файлы или же слова с добавлением„/“

я знаю, что я мог бы сделать это с помощью, если заявление до регулярного выражения , чтобы проверить, имеют ли эти слова URL-адрес, и если они есть, пропустите регулярное выражение, но я не хочу добавлять такое вложение, и зная, как это сделать, используя regexp, в любом случае будет полезно в будущем.

Я знаю как сопоставить что-нибудь, кроме ... некоторых букв, т. е.^[0-9], но я не могу использовать то же самое для слов. Я искал googled и обнаружил, что lookahead может решить это, но ... я не могу заставить его работать.

В конце id хотел бы использовать что-то вроде этого (в псевдокоде) , где. + Будет соответствовать только если шаблон не соответствует ни одному из указанных слов. матча (/^(?! общественные | статические | файлы) +/г.)

редактировать 1:

Формата будет что-то в URL, как this..with или без косой черты.

/контроллер/действие/4/вар: что-то/

я хочу сделать регулярное выражение, которое соответствует этому контроллеру - действие - ID шаблона, но в то же время Wouldnt соответствует моделям, как это /государственным/images/4 или static/files/somefile

В общем, id любит знать, как согласовать шаблон, но только если он не начинается с заданных слов.

например что-то вроде этого ... но он не работает (матч. +, Но только если оно не содержит слово, упомянутое выше /^(?!public|static|files).+/Г)

+0

я отправил примеры, которые я уже пробовал, и гугл. googling в основном вызывает простой ^, который работает в [], но не со словами –

+0

Можете ли вы привести пример формата входного файла и что именно вы хотите согласовать? (Если вы еще не решили это) – quazzieclodo

+0

обновил мое сообщение, отредактировал 1 –

ответ

0

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

/^\/(?!public|static|files)([^\/]+)?\/?([^\/]+)?\/?([^\/]+)?\/?(.*)$/i 

1-й захват будет контроллером, второй - это действие, 3-й - это идентификатор, а 4-й - это то, что осталось.

См this jsfiddle

+0

. Это будет работать нормально, но оно будет игнорировать начало URL-адреса с ./controller/action или контроллер/действие, но это не проблема. –

+0

@RainerPlumer Да, вам, скорее всего, придется выполнить какую-то нормализацию перед сопоставлением (или, может быть, регулярное выражение может быть более гибким, но оно уже достаточно сложное). Нормализация будет необходима рано или поздно, хотя, независимо от того, как вы выполняете соответствующие – Flambino

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