如何用JavaScript正则替换分隔符间的重复字符串?
解决方案
要实现将&和RGH之间的每个moo;替换为A,且替换次数与原出现次数完全一致,可以利用JavaScript的String.replace()方法结合回调函数完成,单个正则表达式即可满足需求:
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;)+RGH/g, function(match) { // 截取&和RGH之间的内容,计算moo;的出现次数 const mooCount = match.substring(1, match.length - 3).split('moo;').length - 1; // 生成对应数量的A,拼接&和RGH作为替换结果 return `&${'A'.repeat(mooCount)}RGH`; }); console.log(a);
代码说明
- 正则表达式:
/&(moo;)+RGH/g全局匹配所有以&开头、RGH结尾,且中间包含至少一个moo;的片段。 - 回调函数:每次匹配到目标片段时执行:
- 通过
substring截取&之后、RGH之前的核心内容; - 用
split('moo;')分割字符串,数组长度减1即为moo;的出现次数; - 用
'A'.repeat(mooCount)生成对应数量的A,再拼接首尾的&和RGH完成替换。
- 通过
之前尝试无效的原因
你之前的正则写法都是直接将整个匹配片段替换为单个A,没有根据moo;的实际出现次数动态生成对应数量的字符,因此无法达成需求。而回调函数可以灵活计算次数并生成对应内容,完美匹配你的要求。
内容的提问来源于stack exchange,提问作者Sampisa
相关产品推荐
相关产品推荐

