2

我正在尝试编写一个匹配类似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')。

4

5 回答 5

1

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

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

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

于 2013-04-15T15:47:10.597 回答
0

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

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

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

于 2013-04-15T15:53:22.440 回答
0
function test(r){
    return  "01, 03, 05-08, 10".match(r) && 
            !"01, 03, 05-08,".match(r)
}

test(/^(\d+(-\d+)?,\s*)*\d+$/)
于 2013-04-15T17:38:10.037 回答
0

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

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

请注意,您不必转义-方括号的外部。

于 2013-04-15T15:42:30.340 回答
0

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

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

和一个序列NUMBER_PATTERN[, NUMBER_PATTERN]*

那这个呢:

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

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

于 2013-04-15T15:46:00.627 回答