我已经在这里待了太久,试图弄清楚如何匹配逗号分隔的值字符串,同时将值拆分为自己的捕获组。以下是我的要求:
我非常接近,但我无法将字符串中的所有字词都放入自己的捕获组中。相反,它将最后一个匹配的术语从第一个捕获组放入组#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
我很确定我没有正确设置我的捕获/非捕获组。任何帮助将不胜感激。
答案 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*
(?:
(?= , )
| $
)
)