3

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

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

我想掩盖它以便我得到结果

ABC123
DEF456

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

很明显我需要用类似的东西来启动正则表达式

(?<=| )[A-Z]{3}

这让我很开心ABCDEF但我不知道如何有效地连接字符串末尾的数字。

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

4

2 回答 2

2

http://regexr.com?375u8

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

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

如果您的Some text中间包含三个数字,这甚至会起作用。

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

.*(?<=| )([A-Z]{3}).*?(\d{3})
于 2013-11-13T10:38:08.367 回答
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"]
于 2013-11-13T10:43:33.163 回答