2011-01-17 4 views
1

Я понимаю концепции RegEx, но это более или менее первый раз, когда я на самом деле пытался написать некоторые из них.RegEx - символ не до матча

Как часть проекта, я пытаюсь разобрать строки, которые соответствуют определенному домену (на самом деле массив доменов, но давайте будем держать его простым).

Сначала я начал с этим:

url.match('www.example.com') 

Но я заметил, что я также получаю ввод так:

http://www.someothersite.com/page?ref=http://www.example.com

Эти строки будут матча курса для www.example.com, но я хочу их исключить. Поэтому я думал по этим строкам: используйте только строки, содержащие www.example.com, но не после символа ?. Это то, что я придумал:

var reg = new RegExp("[^\\?]*" + url + "(\\.*)", "gi"); 

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

Редактировать: Некоторые разъяснения.

  • Вход регистрируется в запросах GET. Из них я хочу отфильтровать только несколько доменов. Они будут иметь/должны обрабатывать 0-1 произвольные поддомены (example.com, www.example.org, www.somethirdsite.com и web.example.net должны быть действительными), они будут храниться в переменной.
  • Я специально нашел запрос, как указано выше, но я также хотел бы обрабатывать http://www.someothersite.com/page?ref=https://www.example.com и http://www.someothersite.com/page?ref=www.example.com, т. Е. Если моя игла не является частью домена запроса, а является частью данных запроса, я не хочу, чтобы совпадение.
+0

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

+0

Кроме того, ответы, которые полезны, и принять ответ, который решает вашу проблему. –

ответ

1

Edit: здесь измененная регулярное выражение для произвольной области:

RegExp("(^|\\s)(https?://)?(\\w+\\.)?" + url, "gi"); 

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

+0

Возможно, я слишком задумываюсь, но разве это не так, как мой первый пример? не знаю, как «/ https ?:» будет функционировать. Кроме того, я забыл упомянуть, но нет никакой гарантии, что будет часть «www», что означает, что мне нужен какой-то шаблон, который, в свою очередь, мог бы есть «?» – danneth

+0

@danneth: что вас смущает о 'https?'? – SilentGhost

+0

Я действительно не знал, что? характер в регулярном выражении, сказал вам, что я новичок в этом :) Теперь я вижу, что в Википедии он определяется как «Соответствует предыдущему элементу шаблона ноль или один раз». Это делает ваш пример лучше. Хотя (не указано выше), я не уверен, что вторая часть всегда будет содержать другой http (но, вероятно, будет). – danneth

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