0

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

示例字符串:“来自 [record:CityID] 的客户 [record:CustomerID] 属于 [record:TypeID] 类型”

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

[“客户 ID”、“城市 ID”、“类型 ID”]

可以做到吗?

4

2 回答 2

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]+意思是“匹配一串字母(大写或小写)或数字”,并+指定“长度为一个或多个”。这里的 A*表示“长度为 0 或更多”。

在这里,我使用了两个基于相同模式的正则表达式。它们使用不同的选项进行编译:g标志告诉正则表达式查找字符串中的所有匹配项。使用此标志,我们不会获得与结果匹配的组,而只会获得匹配的整个字符串。第二个正则表达式是在没有g标志的情况下编译的,所以我们可以用它来提取匹配的组。

于 2012-06-19T12:45:31.060 回答
0

实际上,类似的东西sed可以解决问题,即:

echo "Customer ..." | sed -e 's/\][^[]*\[record:/","/'g -e 's/^.*record:/["/' -e 's/].*$/"]/
于 2012-06-19T12:53:19.947 回答