各位正则表达式专家,
我有一个充满表达式的平面文件,例如:
SELECT * FROM CONVENIENT_ONE_LINE_QUERY
"SELECT * FROM THIS_QUERY
WHERE IS_SPREAD_OVER == 123
ORDER BY MULTIPLE_LINES
HAVING AND_IS_BETWEEN_QUOTES"
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER
我想消除引号和引号本身之间的 CRLF ,这样我的所有查询都是方便的单行语句:
SELECT * FROM CONVENIENT_ONE_LINE_QUERY
SELECT * FROM THIS_QUERY WHERE IS_SPREAD_OVER == 123 ORDER BY MULTIPLE_LINES HAVING BUT_IS_BETWEEN_QUOTES
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER
请发布解决方案中使用的正则表达式风格。我正在使用 TextCrawler,它声称是 ECMA262(与 VBScript/Javascript 相同),我最接近的解决方案如下:
(\r\n".*)(.*)\r\n(.*"\r\n)
请原谅我的无知。 此致, 山猫开普勒
最佳答案
如果下一个 "
位于行尾,您可以首先删除所有 CRLF:
result = subject.replace(/\r\n(?=[^"]*"$)/mg, " ");
说明:
\r\n # Match a CRLF
(?= # if and only if
[^"]* # it is followed by any number of non-quote characters
" # and a quote
$ # at the end of a line
) # End of lookahead.
这会将您的示例转换为
SELECT * FROM CONVENIENT_ONE_LINE_QUERY
"SELECT * FROM THIS_QUERY WHERE IS_SPREAD_OVER == 123 ORDER BY MULTIPLE_LINES HAVING AND_IS_BETWEEN_QUOTES"
SELECT * FROM ANOTHER_CONVENIENT_ONE_LINER
然后,在第二步中,删除引号:
result = subject.replace(/^"|"$/mg, "");
关于javascript - 保留文本但消除标签之间的 CR LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6046708/