至少可以说,我不是正规表达专家。我正在寻找的是一个正则表达式,从字符串中提取某种格式的多个值。
示例字符串: “来自[记录:CityID]的客户[记录:CustomerID]的类型为[记录:TypeID]”
我需要的是一个表达式,它给我这个字符串中格式为“[record:XXXXX]”的所有值。所以在这个例子中它会给我:
[“CustomerID”,“CityID”,“TypeID”]
可以吗?
答案 0 :(得分:0)
在Javascript中:
var pattern = '\\[record:([a-zA-Z0-9]+)\\]';
var records = new RegExp(pattern, 'g');
var extract = new RegExp(pattern);
var string = "Customer [record:CustomerID] from [record:CityID] is of type [record:TypeID]"
var matches = string.match(records);
console.log(matches);
> [ '[record:CustomerID]',
'[record:CityID]',
'[record:TypeID]' ]
var records = [];
for (var i=0; i<matches.length; i++) {
var match = matches[i].match(extract);
records.push(match[1]);
}
console.log(records)
> [ 'CustomerID',
'CityID',
'TypeID' ]
可能不是最简洁的解决方案,但干净且(希望)可理解。
\
放在他们面前进行转义()
中,形成正则表达式组/子模式[a-zA-Z0-9]+
表示“匹配一串字母(大写或小写)或数字”,+
指定“长度为一或多”。 *
这里的意思是“长度为0或更长”。这里我使用两个基于相同模式的正则表达式。它们使用不同的选项进行编译:{{1}}标志告诉正则表达式查找字符串中的所有匹配项。使用此标志,我们不会获得与结果匹配的组,只有匹配的整个字符串。第二个正则表达式编译时没有g
标志,因此我们可以使用它来提取匹配的组。
答案 1 :(得分:0)
实际上,像sed
之类的东西可以解决这个问题,即:
echo "Customer ..." | sed -e 's/\][^[]*\[record:/","/'g -e 's/^.*record:/["/' -e 's/].*$/"]/