【问题标题】:RegExp: Match repeating sequence pattern of numbersRegExp:匹配数字的重复序列模式
【发布时间】:2013-04-15 15:24:37
【问题描述】:

我正在尝试编写一个匹配 01, 03, 05-08, 10 之类但不匹配 01, 03, 05-08, 的正则表达式(因为序列必须以数字结尾)。

所以基本上我的“字符串”由 /(\-?\d+)\-(\-?\d+)/(例如 01-05 或 -5-10)组成,此模式的每个实例都用逗号分隔。

我用 RegExr 尝试了很长时间,但找不到解决我的问题的方法。这是我的尝试:http://regexr.com?34hh1

使用 RegExp 我想做 SEQUENCE_EXP.test('some string')。

【问题讨论】:

    标签: javascript regex validation


    【解决方案1】:

    试试这个模式,这是你指定的确切要求

    ^(-?\d+(--?\d+)?,\s?)*-?\d+(--?\d+)?$
    

    现场演示:http://regexr.com?34hhp

    【讨论】:

      【解决方案2】:

      您可以使用$ 运算符来指示字符串必须以表达式结尾。在您的情况下,您可以尝试:

      /^((-?\d+(-\d+)?)\s*,\s*)+(-?\d+(-\d+)?)$/
      

      请注意,您不必在方括号之外转义 -

      【讨论】:

        【解决方案3】:

        所以,你有两个模式,一个有效的数字\d+\d+-\d+

        所以NUMBER_PATTERN 必须是\d+(-\d+)?

        还有一个序列NUMBER_PATTERN[, NUMBER_PATTERN]*

        这个呢:

        /\d+(-\d+)?(, \d+(-\d+)?)*$/
        

        看看http://regexr.com?34hhj

        【讨论】:

          【解决方案4】:

          这个正则表达式应该适合你:

          ^(?:\d+(?:-\d+)?,)*\d+$
          

          现场演示:http://www.rubular.com/r/QTnbqncycZ

          【讨论】:

            【解决方案5】:
            function test(r){
                return  "01, 03, 05-08, 10".match(r) && 
                        !"01, 03, 05-08,".match(r)
            }
            
            test(/^(\d+(-\d+)?,\s*)*\d+$/)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多