在这种情况下如何编写正则表达式?

时间:2019-01-18 04:31:11

标签: javascript regex

我想用javascript写一个正则表达式以匹配以下有效方案。稍后,如果我必须使用组进行提取,那么我将能够这样做。

我尝试了下面的正则表达式,但是没有给我想要的模式。

/[0-9][+-[0-9]+]*/

正则表达式应该能够匹配“有效”方案。

// Valid
64344
   9434
  434-543 
434-543   
434  -   543
4435 - 343434
1-2,3,5,6 
1-2,3,5,6-6,45-4 
3,5,6, 8 -  9,24 
   1-2,3,5 ,6  
1-  2,3,  5,6-6,45-4



// Invalid
23 -
2343.3434
343.3434 - 13.466
23 ,
234,
,54
xyz   9
3,5,6,8-9,24,
,35,65,65
,35,65,65 -
,3  5,65,65,
3,5,6, 8-  9,24,
1-  2,3,  5,6-6,4 5-4
,  35,65,6 5
,35,  6  5,65,

1 个答案:

答案 0 :(得分:1)

看一下样本,我觉得您想要的是一个用逗号分隔的数字,其中一些可以在1-2之内排列,并且它们之间以及在字符串的开头或结尾都具有可选的空格。这是您可以使用的正则表达式,

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

说明:

  • ^-字符串的开头
  • \s*-输入开始处的可选空格
  • \d+-匹配一个或多个正义数字
  • (?:\s*-\s*\d+\s*)?-与-2这样的范围内的数字匹配,其中可以有空格,而?的末尾表示范围部分是可选的
  • (?:\s*,\s*\d+(?:\s*-\s*\d+)?)*-这个正则表达式部分确保数字可以用逗号分隔,其中的\d+(?:\s*-\s*\d+)?部分启用2-3形式的数字,其中?表示可以只是纯数字而没有范围的一部分,而*的全部可以是零次或更多次
  • \s*-输入末尾的可选空格
  • $-输入结束

Live Demo