正则表达式从一个长字符串中提取两个项
regular expression to extract two items from a long string
有些字符串具有以下类型的格式,
{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];
}
尝试: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);
}
相关文章:
- 如何从两个不同的来源提取JSON数据
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- Mongoose查询在两个日期时间之间提取数据
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 使用javascript中的正则表达式提取最后两个斜杠之间的字符串
- 使用ng repeat从两个不同的JSON文件中提取数据
- 正则表达式从一个长字符串中提取两个项
- 使用jquery计算提取数据的两个输入值
- 如何提取两个字符之间的字符串
- 如何根据 javascript 中的两个字符比较从另一个字符串中提取字符串
- 同时提取两个链接
- 我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
- 如何在两个单词之间提取最少的字符
- Simple Nodejs Regex:从两个字符串之间提取文本
- 将两个日期与从HTML5数据中提取的javascript进行比较
- 如何提取两个斜杠之间的子字符串
- NODEJS:提取两个不同字符之间的字符串并将其存储在数组中
- JavaScript:使用正则表达式提取两个可选字符之间的部分字符串
- Mongojs从两个集合中提取数据并合并结果
- 如何使用正则表达式从url中提取两个字符串