如何反复捕捉一组?

时间:2016-07-08 17:59:52

标签: regex

假设我有以下字符串

Bimkingo Clasico Prom 135g LON 49835 Gansito ME 5p 250g MTA MLA 49860 Wonder

我想只提取不包含数字或仅包含大写字母的标记。

输出应为

Bimkingo Clasico Prom Gansito Wonder

这似乎不起作用:\b(([a-zA-Z]+)+)\b

2 个答案:

答案 0 :(得分:1)

使用:

(\b[A-Z]?[a-z]+\b)+

从regexp库中检索所有组(因为没有办法将它放在一个组中)并用空格连接它们。

测试用例:https://regex101.com/r/hY2fM8/1

答案 1 :(得分:1)

以下正则表达式angular .module('myApp') .directive('employeeCard', function() { return { restrict: 'AEC', scope: {employee :'='}, template: '<strong>{{ employee.name }}</strong>' } }); 应该按预期工作,用于OP的帖子和其他边缘情况中的输出示例:

&#13;
&#13;
(\b[a-zA-Z]+[a-z]+\b)
&#13;
&#13;
&#13;

&#34; krzyk&#34;匹配发布的输出OP,但未能&#34; 仅提取不包含数字或仅包含大写字母的标记&#34;在边缘情况下,未由OP的示例输出表示。运行上面的代码段以更好地表示问题。

正则表达式解释:

var string = 'Bimkingo Clasico Prom 135g LON 49835 Gansito ME 5p 250g MTA MLA 49860 Wonder';
var regexp = /(\b[a-zA-Z]+[a-z]+\b)+/g;
var matches = string.match(regexp);
var output = "Bimkingo Clasico Prom Gansito Wonder";
console.log('Matches test output provided by OP "' + output + '":');
console.log(output === matches.join(' '), '\n');
console.log(''); // new line

// Cases not contained in OP's example output string...
var string = 'mArceLino marcelino';
console.log('Also matches all lowercase and uppercase mid word "' + string + '":', '\n');
var matches = string.match(regexp);
console.log(matches.length === 2);
console.log(''); // new line

var string = 'MARCEL1N0 MARCELINO11';
console.log('Excludes all uppercase with number mix "' + string + '":');
var matches = string.match(regexp);
console.log(matches === null);