所以我花了很多时间在另一个堆栈溢出问题上,同样的问题出现了前一个问题。非捕获组不能像我期望的那样工作,或者我相信。
这是一个愚蠢的例子,与其他人的CSS测试字符串一致......
这是我的正则表达式:
(?:(rgb\([^)]*\)|\S+)(?:[ ]+)?)*
这是测试字符串:
1px solid rgb(255, 255, 255) test rgb(255, 255, 255)
我期待匹配组“1px”,“solid”,“rgb(255,255,255)”,“test”,“rgb(255,255,255)”
但我只得到最后一个令牌匹配。
这是测试的链接:
这里出了什么问题?我以为我有非捕获组,并且在regex101底部解释它的方式是有道理的,包括“贪婪”。
答案 0 :(得分:3)
捕获组会覆盖之前的每个匹配项。捕获组#1首先匹配“1px”,然后捕获组#1匹配“solid”覆盖“1px”,然后匹配“rgb(255,255,255)”覆盖“solid”等。
答案 1 :(得分:2)
为此,您需要使用全局选项:
/(rgb\([^)]+\)|\S+)/g
非捕获组从组中消除其结果。 所以,如果你想匹配:
"1px","solid", "rgb(255, 255, 255)", "test", "rgb(255, 255, 255)"
然后你不想那样使用捕获组。
请参阅:What is a non-capturing group? What does a question mark followed by a colon (?:) mean?
在顶部看到里卡多·诺尔德的答案。 你正在消除你想要的那些。