Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将每个匹配值放入其自己的捕获组中_Javascript_Regex_Capturing Group - Fatal编程技术网

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

Javascript 将每个匹配值放入其自己的捕获组中,javascript,regex,capturing-group,Javascript,Regex,Capturing Group,我在这方面已经做了太久了,试图找出如何匹配以逗号分隔的值字符串,同时将值拆分为各自的捕获组。以下是我的要求: 无前导逗号 术语可以是字母数字,包含1到7个字符 最小:1个学期;马克斯:无限 术语和逗号之间的空格不限 无尾随逗号 我非常接近,但我无法将字符串中的所有术语都放入它们自己的捕获组中。相反,它将第一个捕获组的最后一个匹配项放入组#1中,而不是将所有匹配项放入以前的组中。下面是我的例子: abc1234,def5678,ghi9012 我希望abc1234是第1组,def5678是第2

我在这方面已经做了太久了,试图找出如何匹配以逗号分隔的值字符串,同时将值拆分为各自的捕获组。以下是我的要求:

  • 无前导逗号
  • 术语可以是字母数字,包含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


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

这可以帮到你。使用提取正则表达式,值位于组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* 
      (?:
           (?= , )
        |  $ 
      )
 )

你不能这样做,你的正则表达式只有两个捕获组(第一个组每次都被外部(?:())
+
覆盖)。唯一的方法是一次匹配一个字段。所以听起来我需要将其分为两个步骤,而不是一步一步地完成。为你真正理解这些内容,向你致敬。