【问题标题】:Case insensitive in regex with Javascript [duplicate]使用Javascript的正则表达式不区分大小写[重复]
【发布时间】:2012-11-01 03:25:35
【问题描述】:

可能重复:
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"

正则表达式不匹配。为了能够匹配不区分大小写,我将如何适应?

【问题讨论】:

    标签: javascript regex


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

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 1970-01-01
      • 2011-04-25
      • 2018-07-07
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多