需要使用regex从字符串中提取值(出于性能原因)。 案例可能如下:
生成的分隔[label,value]数组应为:
我研究了解决方案和流行的库,只需将整个字符串拆分以获取值, 例如'RED,100'.split(/,/)可能就是这样做的。
但是我试图用逗号创建一个正则表达式,只有当逗号没有包含在引号类型值中时才会分裂。
这可能不是标准的CSV行为。但最终用户输入值非常容易。 输入标签,价值。做任何内部价值,如果那被报价包围。如果您想包含引号,请使用反斜杠。
感谢任何帮助。
答案 0 :(得分:1)
您可以使用此正则表达式来处理字符串中的转义引号:
/"[^"\\]*(?:\\.[^"\\]*)*"|[^,"]+/g
RegEx说明:
"
:匹配文字开头报价[^"\\]*
:匹配任何不是\
且不是引用的字符的0或更多(?:\\.[^"\\]*)*
:跟随转义字符和另一个非引号,非\
。匹配此组合的0或更多以通过所有转义字符"
:匹配结束报价|
:或(更改)[^,"]+
:匹配非引号,非逗号字符串的1+
const regex = /"[^"\\]*(?:\\.[^"\\]*)*"|[^,"]+/g;
const arr = [`RED,100`, `RED,"100"`, `RED,"100,"`,
`RED,"100\\"ABC\\"200"`];
let m;
for (var i = 0; i < arr.length; i++) {
var str = arr[i];
var result = [];
while ((m = regex.exec(str)) !== null) {
result.push(m[0]);
}
console.log("Input:", str, ":: Result =>", result);
}
&#13;
答案 1 :(得分:1)
您可以使用String#match
并仅使用这些群组。
var array = ['RED,100', 'RED,"100"', 'RED,"100,"', 'RED,"100\"ABC\"200"'];
console.log(array.map(s => s.match(/^([^,]+),(.*)$/).slice(1)))
&#13;