2013-11-14 2 views
0

Ниже приведен код для проверки выражения. Он будет проверять начало строки, после пробела и после @.Регулярное выражение не считая. при выполнении теста шаблона в javascript

var mail1 = "[email protected]"; 
var mail2 = "[email protected]"; 

var searchData = "john."; 

var pattern1 = new RegExp("(?:^|[\\s\@])"+searchData, "i"); 
if(pattern1.test(mail1)){ 
    console.log("matched is:::"+mail1.match(pattern1)); 
} 
if(pattern1.test(mail2)){ 
    console.log("matched is:::"+mail2.match(pattern1)); 
} 

Не должно совпадать с mail2. но его не рассматривает ». и сопоставление почты2 также.

скрипку: http://jsfiddle.net/LQg7W/2319/

но когда я даю "searchData" переменную как "john_", он будет искать правильно.
Fiddle: http://jsfiddle.net/LQg7W/2320/

Как решить эту проблему.

+0

'@' не должны быть escaped – ThiefMaster

+0

@ThiefMaster: А спасибо за это. Но любая помощь в разрешении "." issue :-) – Cindrella

ответ

0

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

var pattern1 = new RegExp("(?:^|[\\s\@])"+searchData.replace(/\./g, '\\.'), "i"); 

Обновлено JSFiddle

+0

Спасибо. Сохранено мое время. Я знаю это "." соответствует всем символам. Я пытался избежать этого разным способом, но это не сработало. – Cindrella

0

Dot соответствует всем. В регулярном выражении точка является подстановочным знаком, который соответствует любому символу, поэтому он соответствует вашей буквальной точке в [email protected], но он точно соответствует значению подчеркивания в [email protected].

Чтобы соответствовать буквальной точке, вам необходимо избежать ее с обратной косой чертой, например \.. Кроме того, есть другие символы, которые имеют особые значения. Просто конкатенация searchData к вашему шаблону может оставить вас со всеми видами неэкранированных специальных символов, которые могут даже сделать ваше выражение недействительным, вызывая ошибку или, возможно, создать очень медленное совпадение , которое будет длиться вечно.
Если в JavaScript нет функции библиотеки, чтобы избежать всех специальных символов, вы должны создать ее самостоятельно.

0

Точка в searchData не экранирована, поэтому она соответствует любому символу.

Вы должны избежать этого:

var searchData = "john\."; 

Если вам нужен более универсальный способ избежать ваш шаблон поиска, вы можете найти этот вопрос полезным: Is there a RegExp.escape function in Javascript?

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