至少可以说,我不是正则表达式专家。我正在寻找的是一个正则表达式,它从字符串中提取特定格式的多个值。
示例字符串:“来自 [record:CityID] 的客户 [record:CustomerID] 属于 [record:TypeID] 类型”
我需要的是一个表达式,它给我这个字符串中格式为“[record:XXXXX]”的所有值。所以在这个例子中它会给我:
[“客户 ID”、“城市 ID”、“类型 ID”]
可以做到吗?
至少可以说,我不是正则表达式专家。我正在寻找的是一个正则表达式,它从字符串中提取特定格式的多个值。
示例字符串:“来自 [record:CityID] 的客户 [record:CustomerID] 属于 [record:TypeID] 类型”
我需要的是一个表达式,它给我这个字符串中格式为“[record:XXXXX]”的所有值。所以在这个例子中它会给我:
[“客户 ID”、“城市 ID”、“类型 ID”]
可以做到吗?
在 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]+
意思是“匹配一串字母(大写或小写)或数字”,并+
指定“长度为一个或多个”。这里的 A*
表示“长度为 0 或更多”。在这里,我使用了两个基于相同模式的正则表达式。它们使用不同的选项进行编译:g
标志告诉正则表达式查找字符串中的所有匹配项。使用此标志,我们不会获得与结果匹配的组,而只会获得匹配的整个字符串。第二个正则表达式是在没有g
标志的情况下编译的,所以我们可以用它来提取匹配的组。
实际上,类似的东西sed
可以解决问题,即:
echo "Customer ..." | sed -e 's/\][^[]*\[record:/","/'g -e 's/^.*record:/["/' -e 's/].*$/"]/