可能重复:
javascript中不区分大小写的正则表达式
现在我有这个:
my_list.match(new RegExp("(?:^|,)"+my_name+"(?:,|$)")))
其中,鉴于以下情况:
my_list = "dog, cat, boy"
my_name = "dog"
会返回真。
但是,如果我有
my_list = "Dog,Cat,boy"
和
my_name = "boy"
正则表达式不匹配。我将如何适应以便能够与不区分大小写的匹配?
可能重复:
javascript中不区分大小写的正则表达式
现在我有这个:
my_list.match(new RegExp("(?:^|,)"+my_name+"(?:,|$)")))
其中,鉴于以下情况:
my_list = "dog, cat, boy"
my_name = "dog"
会返回真。
但是,如果我有
my_list = "Dog,Cat,boy"
和
my_name = "boy"
正则表达式不匹配。我将如何适应以便能够与不区分大小写的匹配?
首先:永远不要从未转义的变量构建正则表达式。使用此函数首先转义所有特殊字符:
RegExp.quote = function(str) {
return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
};
它修改了RegExp对象,您只需要包含它一次。现在:
function stringContains(str, token) {
var
spaces = /^\s+|\s+$/g, // matches leading/trailing space
token = token.replace(spaces, ""), // trim the token
re = new RegExp("(?:^|,)\\s*" + RegExp.quote(token) + "\\s*(?:,|$)", "i");
return re.test(str);
}
alert( stringContains("dog, cat, boy", " Dog ") );
笔记
"i"使得new RegExp大小写不敏感。\s*允许逗号之前/之后的空格。"(?:^|,)\\s*"是正确的,而不是"(?:^|,)\s*""(在 JS 字符串中,所有反斜杠都需要转义)。