是否可以使用正则表达式匹配字符串的一半或使用匹配组的一半?

Is it possible to match half of a string using regex or use half of a matched group?

我有一个如下形式的字符串 "some_text_AAAABB_some_other_text"。字符串中有任意偶数个“A”,"BB" 是跟在“A”之后的固定字符串。假设有 2n 'A's 我想使用正则表达式将 'A's 替换为长度为 n.

对于以下字符串

"some_text_AAAABB_some_other_text"

结果会是

"some_text_AABB_some_other_text"

是否可以使用正则表达式实现此目的?

我正在使用 V8 javascript 执行转换。

有两种情况:1)A的个数是偶数,2)A的个数是奇数。

如果不关心A是偶数还是奇数,就用

replace(/(A+)BB/g, "BB")

其中 (A+) 匹配并捕获一个或多个 A 到第 1 组 尽可能多 </code> 匹配相同的子字符串(与捕获到第 1 组的数字相同)。由于 <code>BB 是一个固定的字符串,我们只是将它作为文字放入模式中。

this regex demo

如果不想修改A为奇数的字符串,需要

replace(/(^|[^A-Z])(A+)BB/g, "BB")

this regex demo

这里,第一个捕获组捕获字符串^的开头或除[A-Z]以外的任何字符,第二个捕获组捕获1个或多个As,并且反向引用现在具有 ID = 2 - 因此,使用