我想从字符串分号中提取值,分号分隔的值也可以包含分号,但不是分隔符。我在这个网站上找到的RegEx (我丢了帖子)几乎是完整的,因为它分离了键和它的值。
示例: my.parameter 10; the.foo "Procedural Map"; pve; server.description "This; is \"my\", my description,.\n"
当前结果与 [^;“]+x”(?:“\[^”])*“/g”
[
'server.seed',
'10',
'pve',
'server.level',
'"Procedural Map"',
'server.description',
'"This; is \\"my\\", server; description,."'
]期望结果
[
'my.parameter 10',
'the.foo "Procedural Map"',
'pve',
'server.description "This; is \"my\", server; description,.\n"'
]你能帮我改进RegEx来分组参数及其值吗?
发布于 2022-02-06 15:13:34
您可以使用重复模式首先匹配除;以外的任何字符,然后可选地从开头到结束双引号匹配,并在中间匹配转义双引号。
在此之后,可选地重复字符类[^";\\]*,以匹配结束双引号之后的内容。
[^;"\\]+(?:"(?:[^"\\]*(?:\\.[^"\\]*)*)"[^";\\]*)*[^;"\\]+匹配1+乘以除; " \以外的任何字符(?:非捕获组作为一个整体重复"匹配(?:非捕获群[^"\\]*匹配0+乘以除" \以外的任何字符(?:\\.[^"\\]*)*可选择地重复匹配\和任何字符,后面跟着0+时间,除"和\之外,任何字符都可以重复匹配- `)` Close the non capture group
- `"` Match literally
- `[^";\\]*` Optionally match any char except `"` `;` `\`)*关闭外部非捕获组并可选择地重复发布于 2022-02-06 15:04:50
我找到了一个解决办法,方法是用ASCII分离器(␟)替换分隔符,然后分割结果。
const separatorPattern = /; (?=([^"]*"[^"]*")*[^"]*$)/g;
const myRawString = "server.seed 10; server.pve, server.level \"Procedural Map\"; server.description \"This; is \\\"my\\\", server; description,.\"";
const replacedSeparator = myRawString.replace(separatorPattern, "␟");
const parameters = replacedSeparator.split("␟");
console.log(parameters);
/*[
'server.seed 10',
'server.pve, server.level "Procedural Map"',
'server.description "This; is \\"my\\", server; description,."'
]*/https://stackoverflow.com/questions/71007865
复制相似问题