Javascript 是否可以使用正则表达式匹配字符串的一半或使用匹配组的一半?
我有一个如下形式的字符串“some_text_AAAABB_some_other_text”。字符串中有任意偶数个“A”,而“BB”是紧跟在“A”之后的固定字符串。假设有2n'A,我想用一个正则表达式用一个长度为n的'A'字符串替换'A' 对于以下字符串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"
结果将是
"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场景可能对未来的读者有用,所以我添加了这一位。