Javascript 正则表达式从长字符串中提取两项
有些字符串的格式如下:Javascript 正则表达式从长字符串中提取两项,javascript,java,regex,linux,Javascript,Java,Regex,Linux,有些字符串的格式如下: {abc=1234457, cde=3, label=3352-4e9a-9022-1067ca63} <chve> abc? 123.456.789, http=appl.com 试试:abc=(\d*)*?label=([^}]*) 解释 abc=文字匹配 (\d*)捕捉一些数字 *?惰性匹配 label=literal匹配 ([^}]*)抓住所有不是右括号的东西 以下是我的想法: \{abc=(\d+).*label=(.+)\}.* 在\
{abc=1234457, cde=3, label=3352-4e9a-9022-1067ca63} <chve> abc? 123.456.789, http=appl.com
试试:abc=(\d*)*?label=([^}]*)
解释
文字匹配abc=
捕捉一些数字(\d*)
惰性匹配*?
literal匹配label=
抓住所有不是右括号的东西([^}]*)
- 以下是我的想法:
\{abc=(\d+).*label=(.+)\}.*
在\{abc=([\d]*)、label=(.*)(.*)中有两个问题:
- 使用
abc=([\d]*),
,您正在查找abc=([\d]*)
,后跟文本,
。您应该改用*
。由于*
是默认值,因此它将不匹配标签
- 通过使用
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);
}
var row='{abc=1234457,cde=3,label=3352-4e9a-9022-1067ca63}abc?123.456.789,http=appl.com';
var headerPatternResult=/{abc=([0-9]+),*?label=([a-z0-9\-]+)}/.exec(行);
if(headerPatternResult!==null){
var abc=headerPatternResult[1];
var label=headerPatternResult[2];
console.log('abc:'+abc);
console.log('label:'+label);
}
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);
}