正则表达式从字符串中提取多个格式化的值

时间:2012-06-19 12:34:08

标签: string expression

至少可以说,我不是正规表达专家。我正在寻找的是一个正则表达式,从字符串中提取某种格式的多个值。

示例字符串: “来自[记录:CityID]的客户[记录:CustomerID]的类型为[记录:TypeID]”

我需要的是一个表达式,它给我这个字符串中格式为“[record:XXXXX]”的所有值。所以在这个例子中它会给我:

[“CustomerID”,“CityID”,“TypeID”]

可以吗?

2 个答案:

答案 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/].*$/"]/