我有一系列看起来像这样的字符串:
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
,但我不知道如何有效地连接字符串末尾的数字。
有没有办法用单个表达式做到这一点?
答案 0 :(得分:2)
(?<=| )([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"]