【问题标题】:Regex pattern not work like expect正则表达式模式不像期望的那样工作
【发布时间】:2017-03-17 18:14:30
【问题描述】:

我有模式

/[^!]!(\z|[^!])/

我有字符串: “我的绳子在这里!”

我需要检查字符串是否有 1 个感叹号(但不是 !! 或 !!!)

【问题讨论】:

  • \z 代表什么?
  • 您可以使用像var regex = /!{2,}/ 这样的正则表达式来检查是否有更多连续的! 并使用NOT like this if(! regex.test(str)) 来反转测试!

标签: javascript regex


【解决方案1】:

如果我正确理解您的问题,这里是example

\A([^!]*)[!]{1}\Z

【讨论】:

    【解决方案2】:

    这个呢?它应该工作

    /\w+!{1}$/i
    

    【讨论】:

      【解决方案3】:

      您可以使用RegExp /!(?=!)/ 匹配! 后跟!! 运算符、RegExp.prototype.test()

      var str = "My string here!";
      var re = /!(?=!)/;
      console.log(!re.test(str));
      
      var str = "My string here!!";
      console.log(!re.test(str));

      【讨论】:

        【解决方案4】:

        这个怎么样

        /[^!]+!$/
        

        你的模式:

        /[^!]!(\z|[^!])/
        

        表示 “第一个字符不是!,第二个字符是!, 第三个字符,应该是最后一个字符或不是任何字符!"

        【讨论】:

          【解决方案5】:

          我创建了我需要的东西。因为我不仅需要检查字符串的结尾,还需要检查字符串的中间

          “我的!字符串”和“我的字符串!”

          /([^!]![^!])|([^!]!$)/
          

          【讨论】:

          • 你想做什么?您的正则表达式与[^!]!(?!!) 相同,您真的需要捕获之前/之后吗?
          • 如果 !! 匹配,您知道字符串中至少有 2 个或更多相邻。你甚至不需要正则表达式。
          • @sln 不带“!”的字符串也不好。我可以计算总数“!”因为它可以在两个地方,例如:“一些!文本在这里!”
          • 好吧,在你的正则表达式中,你没有检查至少有一个!反正。仍然没有理由使用正则表达式。使用字符串函数查找第一个! (通过)和第一个! (失败)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多