将每个匹配的值放在其自己的捕获组中

时间:2014-09-26 18:18:51

标签: javascript regex capturing-group

我已经在这里待了太久,试图弄清楚如何匹配逗号分隔的值字符串,同时将值拆分为自己的捕获组。以下是我的要求:

  • 没有引导逗号
  • 条款可以是字母数字,包含1到7个字符
  • 最小:1个学期;最大:无限
  • 术语和逗号之间的空格无限
  • 没有尾随逗号

我非常接近,但我无法将字符串中的所有字词都放入自己的捕获组中。相反,它将最后一个匹配的术语从第一个捕获组放入组#1,而不是将所有匹配放在以前的组中。所以这就是我的榜样:

abc1234,def5678,ghi9012

我希望abc1234成为组#1,def5678成为组#2,ghi9012成为组#3。相反,使用下面的表达式,我得到组#1中的def5678和组#2中的ghi9012。

/(?:([A-z0-9]{1,7})\s*,\s*)+([A-z0-9]{1,7})/g

Link to RegExr example

我很确定我没有正确设置我的捕获/非捕获组。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这可以帮到你。使用提取正则表达式,该值在组1中。此值也被修剪 如果您需要一个引用字段,请告诉我。

请注意,使用提取符号1不能强制执行1-7个字符的要求 除非提前验证。

验证正则表达式:

 # /^(?:(?:(?:^|,)\s*)[a-zA-Z0-9]{1,7}(?:\s*(?:(?=,)|$)))+$/

 ^    
 (?:
      (?:                           # leading comma + optional whitespaces
           (?: ^ | , )
           \s* 
      )
      [a-zA-Z0-9]{1,7}              # alpha-num, 1-7 chars
      (?:                           # trailing optional whitespaces
           \s* 
           (?:
                (?= , )
             |  $ 
           )
      )
 )+
 $ 

提取正则表达式。

 # /(?:(?:^|,)\s*)([^,]*?)(?:\s*(?:(?=,)|$))/


 (?:                           # leading comma + optional whitespaces
      (?: ^ | , )
      \s* 
 )
 ( [^,]*? )                    # (1), non-quoted field
 (?:                           # trailing optional whitespaces
      \s* 
      (?:
           (?= , )
        |  $ 
      )
 )