【问题标题】:Regex to check whether string starts with, ignoring case differences正则表达式检查字符串是否以开头,忽略大小写差异
【发布时间】:2013-02-20 11:23:21
【问题描述】:

我需要检查一个单词是否以忽略大小写差异的特定子字符串开头。我一直在使用以下正则表达式搜索模式进行此检查,但是当字符串之间存在大小写差异时,这无济于事。

我区分大小写的方式:

var searchPattern = new RegExp('^' + query);
if (searchPattern.test(stringToCheck)) {}

【问题讨论】:

标签: javascript regex


【解决方案1】:

i 修饰符作为第二个参数传递:

new RegExp('^' + query, 'i');

查看the documentation 了解更多信息。

【讨论】:

    【解决方案2】:

    你根本不需要正则表达式,只需要比较字符串即可:

    if (stringToCheck.substr(0, query.length).toUpperCase() == query.toUpperCase())
    

    演示:http://jsfiddle.net/Guffa/AMD7V/

    这还可以处理您需要转义字符以使 RegExp 解决方案工作的情况,例如 query="4*5?" 总是匹配所有其他情况。

    【讨论】:

    • @user01:是的,我在我安装的三个浏览器中测试了这个,并且在所有浏览器中都更快:jsperf.com/regex-vs-compare
    • +1,谢谢。我会采用这个解决方案,但至于关于正则表达式的问题,我应该接受这个答案。
    • 公平地说,RegExp('^' + query, 'i') 对于那些知道 JS 正则表达式系统如何工作的人来说更容易阅读。
    • @William:但是,如果字符串包含任何需要转义的内容,则会失败。工作版本的可读性较差RegExp('^' + query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), 'i')
    • 很公平。在 Node 上,我假设当我们到达代码中的那个点时,一切都已经被转义了。
    【解决方案3】:

    我认为之前的所有答案都是正确的。这是另一个类似于SERPRO的例子,但不同的是没有新的构造函数:

    注意:i 忽略大小写,^ 表示“以”开头。

     var whateverString = "My test String";
     var pattern = /^my/i;
     var result = pattern.test(whateverString);
     if (result === true) {
         console.log(pattern, "pattern matched!");
     } else {
         console.log(pattern, "pattern did NOT match!");
     }
    

    如果您想尝试一下,这里是jsfiddle(旧版本)。

    【讨论】:

      【解决方案4】:

      在这个page 中,您可以看到修饰符可以作为第二个参数添加。在您的情况下,您正在寻找“i”(Canse 不敏感)

      //Syntax
      var patt=new RegExp(pattern,modifiers);
      
      //or more simply:
      
      var patt=/pattern/modifiers;
      

      【讨论】:

        【解决方案5】:

        对于此类情况,JS Regex 提供了一个名为“标志”的功能。它们在使正则表达式更有效和更广泛适用方面提供了额外的帮助。

        这里,可以使用的标志是'i'标志,它忽略大小写(大写和小写),并且不考虑它们(大小写)进行匹配。

        字面表示法:

        let string = 'PowerRangers'
        let regex = /powerrangers/i
        let result = regex.test(string) // true
        

        使用 JS 'RegExp' 构造函数:

        let string = 'PowerRangers'
        let regex = new RegExp('powerrangers', 'i')
        let result = regex.test(string)
        

        【讨论】:

          猜你喜欢
          • 2012-08-05
          • 2017-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-18
          相关资源
          最近更新 更多