修复用于替换引号内所有 \n 和 \r 的正则表达式

这可能很难解释,我会尽力而为。我目前正在 nodejs 中使用 csv 转换流解析器,但我正在努力替换所有 \n's 和 \r's 内引号 (") 来包装一个值。


目前我有以下正则表达式:


(^|[;])"(?:""|[^"])*[\n\r]+(?:""|[^"])*"

在哪里 ; 是列分隔符。


这里有两个例子,第一个是按预期进行的,第二个是捕获但不应该捕获的,因为 ; 在引号内。


第一次测试(成功)


test;"123";"this description with new line feed  below should be

matched by regex";test;"1.0"

 

第二次测试(错误)


NewLine1;"test - this one should not be captured by the regex but its being captured ";test;1

NewLine2;"test that went wrong"

有没有办法选择引号之间的文本,在第一个引号之前包含分号,在最后一个引号之后包含分号,但忽略引号内的分号?我认为这就是我需要的,所以第二个例子没有考虑正则表达式匹配。


先感谢您。


德玛西亚99
浏览 159回答 1
1回答

慕哥6287543

您可以使用:(^|;)"(?:""|[^";])*[\n\r]+(?:""|[^";])*"正则表达式演示我改为[;]因为;它们在您的情况下是等效的。还添加了;字符,[^";]因为您的 CSV 流列值不能包含此字符。我不知道你为什么""在正则表达式中有,但如果你寻求考虑列值中的其他双引号,我假设它们必须被转义\,所以你可以使用像(^|;)"(?:(?<=\\)"|[^";])*[\n\r]+(?:(?<=\\)"|[^";])*"has这样的正则表达式,(?<=\\)"而不是""which 表示"前面有反斜杠的字符。(&nbsp;\")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript