![](/img/trans.png)
[英]Regex - extract string between double quotes where line starts with a keyword
[英]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.