我需要替换分隔符中的一个文本序列,精确地替换它出现的次数。例如,我有这样的文本:
"Cow says &moo;RGH but also &moo;moo;moo;RGH and &moo;moo;moo;moo;moo;RGH too but it doesn't moo; bah!"
字符串
我想替换每一个“哞;“&”和“RGH”之间有一个“A”,所以我期望:
"Cow says &ARGH but also &AAARGH and &AAAAARGH but it doesn't moo; bah!"
型
换句话说,我必须替换每一个“哞;“&”和“RGH”之间的“A”。我必须通过JavaScript使用单个regexp在整个文本上替换它(如果可能的话)我做了很多尝试,例如:
var a="Cow says &moo;RGH but also &moo;moo;moo;RGH and &moo;moo;moo;moo;moo;RGH but it doesn't moo; bah!"
a=a.replace(/(?<=&)((moo;)\1?)+RGH/g,"A");
// a=a.replace(/&(moo;)+RGH/g,"A")
// a=a.replace(/&(?=moo;)\1RGH/g,"A"
console.log(a);
型
但没有明显的成功。这个想法是,每一个“哞;必须用“A”替换,只有当与其他“moo”沿着出现时;“s在“&”和“RGH”之间
有什么建议吗?谢谢你,谢谢
3条答案
按热度按时间xuo3flqw1#
您可以将
(moo;)*
放入lookbehind和lookahead判断提示中。这样,正则表达式将匹配&
和RGH
之间的所有moo:字符串
基准测试:
的数据
型
pw136qt22#
您还可以匹配
moo;
的所有连续序列,并向String#replace
传递一个回调函数,该回调函数根据每个序列的长度替换每个序列。字符串
irlmq6kh3#
因为你想替换每个出现的 “moo;“,您将只希望匹配单个出现,而不是一个序列。
您可以使用 look-around 语法来Assert “moo;“
字符串
型