使用Javascript在正则表达式中不区分大小写

时间:2012-11-12 17:14:15

标签: javascript regex

  

可能重复:
  Case insensitive regex in javascript

现在我有这个:

my_list.match(new RegExp("(?:^|,)"+my_name+"(?:,|$)")))

其中,给出以下内容:

my_list = "dog, cat, boy"
my_name = "dog"

会返回true。

但是,如果我有

my_list = "Dog,Cat,boy"

my_name = "boy"

正则表达式不匹配。为了能够与不区分大小写匹配,我将如何进行调整?

1 个答案:

答案 0 :(得分:1)

首先:永远不要从未转义的变量构建正则表达式。使用此函数首先转义所有特殊字符:

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字符串中,所有反斜杠都需要转义)。