具有不同忽略字符的正则表达式掩码

时间:2013-11-13 10:27:22

标签: regex

我有一系列看起来像这样的字符串:

foobar | ABC Some text 123
barfoo | DEF Some te 456

我想屏蔽它,以便得到结果

ABC123
DEF456

分别。中间的文本将始终是子字符串Some text,可能包含数字(例如S0m3 t3xtS0m3 t3)。它始终是从左边开始的子字符串,所以永远不会me te

很明显,我需要用

之类的东西启动正则表达式
(?<=| )[A-Z]{3}

它让我ABCDEF,但我不知道如何有效地连接字符串末尾的数字。

有没有办法用单个表达式做到这一点?

2 个答案:

答案 0 :(得分:2)

请参阅http://regexr.com?375u8

(?<=| )([A-Z]{3}).*(\d{3})

这将为您提供A-Z范围内的三个字符和两个捕获组中的三个数字,允许您使用这些组将两者连接到所需的输出:$1$2

如果您的Some text中间包含三个数字,这甚至可以使用。

如果您想要用两个捕获组替换所有内容,请在正则表达式前面添加.*

.*(?<=| )([A-Z]{3}).*?(\d{3})

答案 1 :(得分:1)

另一个javascript版本

[
 'foobar | ABC Some text 123',
 'barfoo | DEF Some te 456'
].map(function(v) { 
  return v.replace(/^.*\| ([A-Z]{3}) .* (\d{3})$/, '$1$2'); 
})

给出

["ABC123", "DEF456"]