有些字符串具有以下格式,
{abc=1234457, cde=3, label=3352-4e9a-9022-1067ca63} <chve> abc? 123.456.789, http=appl.com
我想提取1234457
和3352-4e9a-9022-1067ca63
,分别对应abc
和label
。
这是我一直试图使用的javascript,但它不起作用。我认为正则表达式部分是错误的。
var headerPattern = new RegExp("\{abc=([\d]*),,label=(.*)(.*)");
if (headerPattern.test(row)) {
abc = headerPattern.exec(row)[0];
label = headerPattern.exec(row)[1];
}
答案 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);
}