正则表达式从一个长字符串中提取两个项

regular expression to extract two items from a long string

本文关键字:提取 两个 一个 正则表达式 字符串      更新时间:2024-02-17

有些字符串具有以下类型的格式,

{abc=1234457, cde=3,  label=3352-4e9a-9022-1067ca63} <chve>  abc?  123.456.789, http=appl.com 

我想提取12344573352-4e9a-9022-1067ca63,它们分别对应于abclabel

这是我一直在尝试使用的javascript,但它不起作用。我认为正则表达式部分是错误的。

var headerPattern = new RegExp("'{abc=(['d]*),,label=(.*)(.*)");
if (headerPattern.test(row)) {
   abc = headerPattern.exec(row)[0];
    label = headerPattern.exec(row)[1];
}

尝试:abc=('d*).*?label=([^}]*)

解释

  • abc=文字匹配
  • ('d*)捕获一些数字
  • .*?懒惰匹配
  • label=文字匹配
  • ([^}]*)抓住所有不是大括号的东西

以下是我的想法:

'{abc=('d+).*label=(.+)'}.*

你在'{abc=(['d]*),,label=(.*)(.*):中有两个问题

  • 使用abc=(['d]*),,,您将查找abc=(['d]*),然后是文字,,。您应该使用.*。由于默认情况下.*是非自由的,因此它将不匹配超过label
  • 通过使用label=(.*)(.*),第一个.*捕获所有剩余的文本。您希望只捕获到大括号边缘的文本,所以请使用(.*)}.*

免责声明:使用基于Java的regex测试仪制作。如果JavaScript正则表达式中的任何内容会使此无效,请随时发表评论。

您可以通过以下方式完成:

var row = '{abc=1234457, cde=3,  label=3352-4e9a-9022-1067ca63} <chve>  abc?  123.456.789, http=appl.com';
var headerPatternResult = /{abc=([0-9]+),.*?label=([a-z0-9'-]+)}/.exec(row);
if (headerPatternResult !== null) {
    var abc = headerPatternResult[1];
    var label = headerPatternResult[2];
    console.log('abc: ' + abc);
    console.log('label: ' + label);
}