我有这个正则表达式,它给出了单个输入值的描述:
(?:GTSET|GP0|GPP|L0)\|#0[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]*\|(.*)
L0|#060066230-11f1-46db-ad89-2b91ffd42ec4|Processing
但是当谈到多个价值观时 - 它不起作用 - 什么都没有?
GP0|#3e7ea87a-6d25-4f18-a68a-3ccb18f72e57;L0|#03e7ea87a-6d25-4f18-a68a-3ccb18f72e57|Argumentationshilfen;GTSet|#25b6d12b-8e8b-4233-8931-9c50587ca114;GP0|#84e33f19-dc80-4628-b292-a96090b1c702;L0|#084e33f19-dc80-4628-b292-a96090b1c702|Medien (Videos/Grafiken/Bilder)
GP0|#3e7ea87a-6d25-4f18-a68a-3ccb18f72e57;L0|#03e7ea87a-6d25-4f18-a68a-3ccb18f72e57|Argumentationshilfen;GTSet|#25b6d12b-8e8b-4233-8931-9c50587ca114;GP0|#84e33f19-dc80-4628-b292-a96090b1c702;L0|#084e33f19-dc80-4628-b292-a96090b1c702|Medien (Videos/Grafiken/Bilder);GP0|#a8629bc7-a09f-4c45-a864-8506e001ef66;L0|#0a8629bc7-a09f-4c45-a864-8506e001ef66|Technische Daten"
答案 0 :(得分:1)
您需要限制与换行符之外的任何0+字符匹配的(.*)
模式,其中否定字符类与;
,[^;]+
以外的任何1个字符匹配(从它似乎是你需要提取的值的分隔符。)
使用
(?:GTSET|GP0|GPP|L0)\|#0[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]*\|([^;]+)
请参阅regex demo。注意我还通过将三个-[0-9a-f]{4}
合并到(?:-[0-9a-f]{4}){3}
(-<4_HEX_CHARS>
个序列的3次出现)来略微缩小了模式。
var rx = /(?:GTSET|GP0|GPP|L0)\|#0[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]*\|([^;]+)/g;
var strs = [ 'L0|#060066230-11f1-46db-ad89-2b91ffd42ec4|Processing', 'GP0|#3e7ea87a-6d25-4f18-a68a-3ccb18f72e57;L0|#03e7ea87a-6d25-4f18-a68a-3ccb18f72e57|Argumentationshilfen;GTSet|#25b6d12b-8e8b-4233-8931-9c50587ca114;GP0|#84e33f19-dc80-4628-b292-a96090b1c702;L0|#084e33f19-dc80-4628-b292-a96090b1c702|Medien (Videos/Grafiken/Bilder)', 'GP0|#3e7ea87a-6d25-4f18-a68a-3ccb18f72e57;L0|#03e7ea87a-6d25-4f18-a68a-3ccb18f72e57|Argumentationshilfen;GTSet|#25b6d12b-8e8b-4233-8931-9c50587ca114;GP0|#84e33f19-dc80-4628-b292-a96090b1c702;L0|#084e33f19-dc80-4628-b292-a96090b1c702|Medien (Videos/Grafiken/Bilder);GP0|#a8629bc7-a09f-4c45-a864-8506e001ef66;L0|#0a8629bc7-a09f-4c45-a864-8506e001ef66|Technische Daten'];
for (var s of strs) {
var res = [], m;
while (m=rx.exec(s)) {
res.push(m[1]);
}
console.log(res);
}
另请注意,(?:GTSET|GP0|GPP|L0)
组最好写为(?:G(?:TSET|P[0P])|L0)
,以避免多余的回溯。