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
相关产品推荐
相关产品推荐

