最简单的方法是匹配逗号和带引号的字符串,然后过滤掉带引号的字符串。
/"[^"]*"|,/g
如果你确实无法匹配引号,你可以这样做:
/,(?=[^"]*(?:"[^"]*"[^"]*)*\Z)/g
这可能会变得很慢,因为对于每个逗号,它必须查看剩余的字符并计算引号的数量。\Z
匹配字符串的结尾。如同$
,但永远不会匹配行结束。
如果您不介意额外的捕获组,可以这样做:
/\G((?:[^"]*"[^"]*")*?[^"]*?)(,)/g
这只会扫描字符串一次。相反,它从字符串的开头开始计算引号。\G
将匹配上一场比赛结束的位置。
最后一个模式可能需要一个例子。
Input String: 'This is, some text, followed by "text, in quotes!" and more ,-as'
Matches:
1. ['This is', ',']
2. [' some text', ',']
3. [' and followed by "text, in quotes!" and more ', ',']
它匹配逗号之前的字符串以及逗号。