我有一系列字符串,看起来像这样:
foobar | ABC Some text 123
barfoo | DEF Some te 456
我想掩盖它,以便我得到结果
ABC123
DEF456
分别。中间的文本将始终是一个子字符串Some text
其中可能包含数字(例如 S0m3 t3xt
或S0m3 t3
)。它将始终是从左侧开始的子字符串,因此永远不要me te
.
很明显,我需要用类似的东西启动正则表达式
(?<=| )[A-Z]{3}
这让我ABC
和DEF
,但我不知道如何有效地连接字符串末尾的数字。
有没有办法用一个表达式做到这一点?
请参阅 http://regexr.com?375u8
(?<=| )([A-Z]{3}).*(d{3})
这将为您提供 A-Z 范围内的三个字符和两个捕获组中的三个数字,允许您使用这些组将两者连接到所需的输出:$1$2
如果您的Some text
之间包含三个数字,这甚至会起作用。
如果要将所有内容替换为两个捕获组,请在正则表达式前面添加.*
:
.*(?<=| )([A-Z]{3}).*?(d{3})
另一个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"]