【问题标题】:JavaScript Regex does not match exact stringJavaScript 正则表达式与精确字符串不匹配
【发布时间】:2012-08-18 06:34:49
【问题描述】:

在下面的示例中,输出为真。它cookie 也匹配cookie14214 我猜这是因为cookie 在字符串cookie14214 中。我如何在这场比赛中磨练只获得cookie

var patt1=new RegExp(/(biscuit|cookie)/i);
document.write(patt1.test("cookie14214"));

这是最好的解决方案吗?

var patt1=new RegExp(/(^biscuit$|^cookie$)/i);

【问题讨论】:

    标签: javascript regex match exact-match


    【解决方案1】:

    是的,或者使用单词边界。请注意,这将匹配great cookies,但不匹配greatcookies

    var patt1=new RegExp(/(\bbiscuit\b|\bcookie\b)/i);
    

    如果你想匹配精确的字符串cookie,那么你甚至不需要正则表达式,只需使用==,因为/^cookie$/i.test(s)s.toLowerCase() == "cookie"基本相同。

    【讨论】:

      【解决方案2】:

      答案取决于您在单词cookie 周围的字符数。如果单词要严格地单独出现在一行上,那么:

      var patt1=new RegExp(/^(biscuit|cookie)$/i);
      

      如果您想允许使用符号(空格、., 等),但不允许使用字母数字值,请尝试以下操作:

      var patt1=new RegExp(/(?:^|[^\w])(biscuit|cookie)(?:[^\w]|$)/i);
      

      第二个正则表达式,解释:

      (?:                 # non-matching group
          ^               # beginning-of-string
          | [^\w]         # OR, non-alphanumeric characters
      )
      
      (biscuit|cookie)    # match desired text/words
      
      (?:                 # non-matching group
          [^\w]           # non-alphanumeric characters
          | $              # OR, end-of-string
      )
      

      【讨论】:

      • 你测试过这个吗?我认为您不能在所需字符串之后使用负前瞻。
      • @jbabey 是的,用萤火虫测试过;此外,正则表达式没有使用任何前瞻(正面或负面)。第二个是使用非匹配组(?:,如果这就是您对(?! 感到困惑的原因
      • @jbabey 很好用;它的工作方式就像它的名字所暗示的那样——正则表达式也必须匹配该组,但它不会在匹配列表中返回它。因此,返回数组将只包含两个组(第一个是匹配的“完整上下文”,第二个是匹配的单词)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多