2013-11-14 2 views
1

Я использую следующее регулярное выражение для фильтрацииRegex фильтр не делает точное совпадение

return this.href.match(/goto.com|xyz.com|loop.com/g); 

Однако, если есть URL называется dogoto.com, что тоже фильтруется. Как я могу изменить свое Regex, чтобы запретить это?

http://jsfiddle.net/wQYuz/7/

+1

Что именно вы хотите регулярное выражение, чтобы соответствовать или не соответствовать? –

+0

нравится http://jsfiddle.net/arunpjohny/VkAP8/1/ –

ответ

2

Вы можете добавить \b (границы слова) по обе стороны от него.

return this.href.match(/\b(goto\.com|xyz\.com|loop\.com)\b/g); 

Вот краткий демо: http://jsfiddle.net/wQYuz/9/

+0

это сработало. благодаря! – KayKay

+2

он работает для вашего тестового примера, но ему нужны скобки вокруг чередования или он исправляет только 'dogoto.com'. 'doxyz.com' и' doloop.com' будут по-прежнему совпадать, когда они не должны. – OGHaza

+0

Демонстрация определенно показывает обратное. –

1

^ соответствует началу строки. Вы можете сделать это:

return this.href.match(/^(goto\.com|xyz\.com|loop\.com)/g); 

Или вы могли бы соответствовать любой не алфавитно-цифровой символ там:

return this.href.match(/\Wgoto\.com|\Wxyz\.com|\Wloop\.com/g); 

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

+0

Как это отличается от границы \ b, как предложил Билл – KayKay

+0

@KayKay Это одно и то же, но по-другому. – Pietu1998

+0

Спасибо за помощь! – KayKay

0

Try:

/\b(goto\.com|xyz\.com|loop\.com)\b/g 

\b матчей на старте/в конце слова. Ему нужны скобки вокруг слов, иначе doxyz.com и doloop.com все равно совпадут.

Fiddle

+0

^в начале, так как некоторые предложили исключить все, кроме URL-адреса в начале строки – OGHaza

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