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

JavaScript如何通过反向正则替换保留仅以1个Tab开头的语句?

实现方案

核心逻辑

用反向正则替换思路,直接匹配所有不是以单个Tab开头的行,全部替换为空,再移除保留行开头的单个Tab,最后调整空行格式即可匹配需求。

完整代码实现

const filterSingleTabLines = (inputStr) => {
  // 第一步:替换所有非单个\t开头的行为空
  let result = inputStr.replace(/^(?!\t[^\t]).*$/gm, '');
  // 第二步:删除保留行开头的单个\t
  result = result.replace(/^\t/gm, '');
  // 第三步:调整空行格式,和预期输出对齐
  return result.replace(/\n{3,}/g, '\n\n').trim();
}

// 测试示例
const testInput = `This is aciton
\t\tTwo tab
\tOne tabdialog
This is aciton
\t\tTwo tab
\tSecond tabdialog`;

console.log(filterSingleTabLines(testInput));

正则参数说明

  • 修饰符g:全局匹配所有符合规则的内容
  • 修饰符m:开启多行匹配模式,让^和$匹配每一行的首尾,而非整个字符串的首尾
  • 第一个正则/^(?!\t[^\t]).*$/gm:
    • (?!\t[^\t])是负向先行断言,匹配不满足「行首为1个Tab + 非Tab字符」的所有行,也就是过滤掉刚好仅以1个Tab开头的行之外的所有内容
  • 第二个正则/^\t/gm:匹配每行行首的单个Tab,直接替换为空即可移除前置Tab

适配说明

如果你需要保留「仅含单个Tab的空行」,可以把第一个正则的断言部分调整为(?!\t(?:[^\t]|$)),即可覆盖行首只有1个Tab、后面没有内容的场景。


内容的提问来源于stack exchange,提问作者mangadrawing.123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:54:04