You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript正则将n次重复的字符/换行减少为n-1次

解决方案

1. 通用连续相同字符次数减1实现

要实现把连续n个相同字符替换为n-1个,可通过正则匹配连续字符后动态截取内容实现,代码如下:

/**
 * 把字符串中连续出现的指定字符数量减1
 * @param {string} str 原始字符串
 * @param {string} targetChar 要处理的目标字符
 * @returns 处理后的字符串
 */
function reduceConsecutiveChar(str, targetChar) {
  // 转义正则特殊元字符,避免*、.这类字符匹配出错
  const escapedChar = targetChar.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  const reg = new RegExp(`${escapedChar}{2,}`, 'g');
  // 匹配到连续字符后,去掉第一个剩下的就是n-1个
  return str.replace(reg, match => match.slice(1));
}

// 星号场景测试
console.log(reduceConsecutiveChar("Hello ***** World", "*")); 
// 输出结果:Hello **** World

2. 列表项之间多余换行处理实现

针对你实际业务中有序、无序列表项之间的换行减1需求,可直接使用以下可落地代码:

/**
 * 减少有序/无序列表项之间的多余换行,n个换行替换为n-1个
 * @param {string} str 原始字符串
 * @returns 处理后的字符串
 */
function reduceNewLineBetweenListItems(str) {
  // 正则匹配规则:前一行是列表项 + 2个及以上换行 + 下一行是列表开头
  const listReg = /((?:\d+\. +[^\n]*|• {3}[^\n]*))(\n{2,})((?:\d+\. +|• {3}))/g;
  return str.replace(listReg, (_, prevContent, newLines, nextListPrefix) => {
    // 连续换行去掉第一个,实现数量减1
    return `${prevContent}${newLines.slice(1)}${nextListPrefix}`;
  });
}

// 业务场景测试
const originStr = `1.  Hello


•   World

•   测试无序列表


2.  测试有序列表接无序列表


•   测试内容`;

console.log(reduceNewLineBetweenListItems(originStr));
/* 输出结果:
1.  Hello

•   World

•   测试无序列表

2.  测试有序列表接无序列表

•   测试内容
*/

该实现支持有序列表接无序列表、无序列表接有序列表、同类型列表之间的多余换行处理,不管中间原有多少空行都能自动减1。

内容的提问来源于stack exchange,提问作者Hari Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:45:05