繁体   English   中英

正则表达式提取逗号之间的字符串但包括引号

[英]Regex to extract string between commas but including quotes

我有以下正则表达式:

const splitRegex = new RegExp('(".*?"|[^",]+)(?=\\s*,|\\s*$)', 'g');
const row = line.match(splitRegex);

提取引号中的字符串但忽略逗号,但是,它不适用于以下字符串: 6000.1, Basic "Internet" abc, 101, NO_VLAN它将仅返回 [ "6000.1", "abc", "101", "NO_VLAN" ]

我尝试在原始[ "6000.1,", "\\"Internet\\" abc,", " 101,", " NO_VLAN" ]的开头和结尾添加“一个单词后跟一个空格” ([^\\s]*)(?=\\s*)正则表达式,但看起来更糟...... [ "6000.1,", "\\"Internet\\" abc,", " 101,", " NO_VLAN" ]

我想要的是 [ "6000.1", "Basic \\"Internet\\" abc", "101", "NO_VLAN" ] 或 [ "6000.1", "Basic \\"Internet\\"", "101", "NO_VLAN" ] 如果字符串是6000.1, Basic "Internet", 101, NO_VLAN

谢谢你。

您可以使用

text.match(/(?=\S)(?:"[^"]*"|[^",])+/g)

或者,如果您需要包含转义序列:

text.match(/(?=\S)(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|[^",])+/g)

请参阅正则表达式演示 #1正则表达式演示 #2

细节

  • (?=\\S) - 下一个字符必须是非空白字符
  • (?:"[^"]*"|[^",])+ - 在非捕获组(?:...) )中定义的模式序列的一次或多次出现 ( + ):
    • "[^"]*" - 要么" ,然后是 0 或更多字符,而不是""
    • | - 或者
    • [^",] - 除了",之外的任何字符。

JavaScript 演示:

 const text = String.raw`6000.1, Basic "Internet \\"text\\"" abc, 101, NO_VLAN`; console.log(text.match(/(?=\\S)(?:"[^"\\\\]*(?:\\\\[\\s\\S][^"\\\\]*)*"|[^",])+/g));

此正则表达式适用于您的示例((?=\\S)[^,]+)

 const regex = /((?=\\S)[^,]+)/gm; const str = `6000.1, Basic "Internet" abc, 101, NO_VLAN`; console.log(str.match(regex));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM