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

Javascript 是否可以使用正则表达式匹配字符串的一半或使用匹配组的一半?,javascript,regex,v8,Javascript,Regex,V8,我有一个如下形式的字符串“some_text_AAAABB_some_other_text”。字符串中有任意偶数个“A”,而“BB”是紧跟在“A”之后的固定字符串。假设有2n'A,我想用一个正则表达式用一个长度为n的'A'字符串替换'A' 对于以下字符串 "some_text_AAAABB_some_other_text" 结果将是 "some_text_AABB_some_other_text" 甚至可以用正则表达式实现这一点吗 我正在使用V8 javascript执行转换。有两种情况:1

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

对于以下字符串

"some_text_AAAABB_some_other_text"
结果将是

"some_text_AABB_some_other_text"
甚至可以用正则表达式实现这一点吗

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

有两种情况:1)As的数量为偶数,2)As的数量为奇数

如果您不关心
A
s是偶数还是奇数,只需使用

replace(/(A+)\1BB/g, "$1BB")
其中,
(A+)
匹配并捕获到组1中的一个或多个
A
s,并且
\1
匹配相同的子字符串(与捕获到组1中的数字相同)。因为
BB
是一个固定的字符串,所以我们将它作为一个文本放入模式中

如果不想修改奇数
a
s的字符串,则需要

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


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

您使用的工具/编程语言是什么,Marcinie?另外,
“some_text_uuaaaaabb_usome_other_text”
的预期输出是什么?要匹配偶数个
A
s,您可以得出以下结论。然而,正如@WiktorStribiżew所指出的,对于奇数发生,该怎么办?将其与
(A+)\1
匹配,并将匹配替换为
\1
。是的,应该有效。仍然不清楚在出现奇数字符的情况下我们应该怎么做。它确实有效,谢谢!我们不关心奇数的“A”。它提供了偶数个“A”。但是,奇数个
A
s场景可能对未来的读者有用,所以我添加了这一位。