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

时间:2016-04-07 00:14:30

标签: javascript java regex linux

有些字符串具有以下格式,

{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];
}

3 个答案:

答案 0 :(得分:0)

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

解释

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

答案 1 :(得分:0)

以下是我提出的建议:

Get-PSSession | Remove-PSSession
$username = "xxxx"
$password = convertto-securestring "yyyyy" -asplaintext -force
$Creds = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
$Session = New-PSSession -ConnectionUri "https://outlook.office365.com/powershell-liveid/" -Credential $Creds -Authentication Basic -AllowRedirection
Import-PSSession -Session $Session

\{abc=(\d+).*label=(.+)\}.* 中有两个问题:

  • 使用\{abc=([\d]*),,label=(.*)(.*),您正在寻找abc=([\d]*),,,然后是文字 abc=([\d]*)。您应该使用,,代替。由于.*是不正确的,因此不会超过.*
  • 使用label,第一个label=(.*)(.*)会捕获所有剩余的文字。您只希望捕获文本直到大括号的边缘,因此请使用.*

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

答案 2 :(得分:0)

您可以通过以下方式执行此操作:

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);
}