我是正则表达的初学者。我需要你的建议。
我想用逗号分隔一个字符串,这些逗号位于带有正则表达式的几个单引号之外。
正则表达式模式:,(?=([^']*'[^']*')*[^']*$)
字符串输入:"'2017-10-16 10:44:43.0000000', 'Abc,'', de', '0', None"
预期输出:["'2017-10-16 10:44:43.0000000'", " 'Abc,'', de'", " '0'", " None"]
有一个包含4个元素的数组。
目前,我正在使用正则表达式的split方法,并且它在JAVA上运行良好。 现在我必须通过JavaScript处理它,但我得到了意想不到的结果!
你能给我一个建议吗?
感谢您的帮助!
答案 0 :(得分:2)
您的正则表达式包含捕获组([^']*'[^']*')
。
如果在正则表达式中使用捕获组,并且在 Java 中传递给String#split()
,则捕获组不会添加到生成的拆分字符串数组中。在 JavaScript 中,String#split()
将所有捕获的子字符串添加到结果数组中。
要使两个引擎之间的模式兼容,只需将捕获组转为非捕获组,
,(?=(?:[^']*'[^']*')*[^']*$)
^^^ ^
请参阅regex demo。
JS演示:
var rx = /,(?=(?:[^']*'[^']*')*[^']*$)/;
var s = "'2017-10-16 10:44:43.0000000', 'Abc,'', de', '0', None";
console.log(s.split(rx));