下面是检查表达式的代码。它将检查字符串的开始,空格之后和@之后。
var mail1 = "john.ga@gmail.com";
var mail2 = "john_wb@gmail.com";
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匹配。但它不考虑“。”并匹配mail2。
小提琴:http://jsfiddle.net/LQg7W/2319/
但是当我将“searchData”变量设为“john_”时,它会正确搜索 小提琴:http://jsfiddle.net/LQg7W/2320/
如何解决此问题。
答案 0 :(得分:0)
.
匹配正则表达式中的所有字符,因此,您需要通过
var pattern1 = new RegExp("(?:^|[\\s\@])"+searchData.replace(/\./g, '\\.'), "i");
更新了JSFiddle
答案 1 :(得分:0)
Dot匹配所有。在正则表达式中,点是与任何字符匹配的通配符,因此它与john.ga@gmail.com
中的文字点匹配,但它与john_wb@gmail.com
中的下划线匹配同样容易。
要匹配文字点,您需要使用反斜杠对其进行转义,例如\.
。此外,还有其他字符具有特殊含义。只需将searchData连接到您的模式就可以为您提供各种未转义的特殊字符,甚至可以使表达式无效,导致错误,或者可能创建一个永远需要的非常慢速匹配。 />
如果JavaScript中没有库函数来逃避所有特殊字符,你应该自己创建一个。
答案 2 :(得分:0)
searchData中的点未转义,因此它匹配任何字符。
你需要逃脱它:
var searchData = "john\.";
如果您需要更通用的方法来转义搜索模式,您可能会发现此问题很有用:Is there a RegExp.escape function in Javascript?