管理元数据格式的正则表达式(多值)

时间:2017-09-12 07:01:54

标签: regex

我有这个正则表达式,它给出了单个输入值的描述:

(?: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|#03‌​e7ea87a-6d25-4f18-a6‌​8a-3ccb18f72e57|Argu‌​mentationshilfen;GTS‌​et|#25b6d12b-8e8b-42‌​33-8931-9c50587ca114‌​;GP0|#84e33f19-dc80-‌​4628-b292-a96090b1c7‌​02;L0|#084e33f19-dc8‌​0-4628-b292-a96090b1‌​c702|Medien (Videos/Grafiken/Bilder)

GP0|#3e7ea87a-6d25-4f18-a68a-3ccb18f72e57;L0|#03e7ea87a-6d25‌​-4f18-a68a-3ccb18f72‌​e57|Argumentationshi‌​lfen;GTSet|#25b6d12b‌​-8e8b-4233-8931-9c50‌​587ca114;GP0|#84e33f‌​19-dc80-4628-b292-a9‌​6090b1c702;L0|#084e3‌​3f19-dc80-4628-b292-‌​a96090b1c702|Medien (Videos/Grafiken/Bilder);GP0|#a8629bc7-a09f-4c45-a864-8506e0‌​01ef66;L0|#0a8629bc7‌​-a09f-4c45-a864-8506‌​e001ef66|Technische Daten"

1 个答案:

答案 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),以避免多余的回溯。