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

JavaScript:替换代码换行符但保留字符串内的\n转义序列

解决方案

要区分代码中的实际换行符与字符串字面量内的\n转义序列,核心是判断换行符是否处于字符串字面量外部。可以通过正则表达式精准匹配所有字符串字面量(包含转义引号的场景),仅替换不在字符串内部的实际换行符。

实现代码

let my_code = `
    alert("abc \\n cde");
    alert('efd \\n hij');
    alert(\`klm \\n opq\`);
    alert("stu \\"vwx\\" \\n yz");
`;
console.log('原始内容:');
console.log(my_code);

// 替换不在字符串内部的实际换行符为@
my_code = my_code.replace(/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`)|(\n)/g, (match, strPart, newline) => {
  // 匹配到字符串部分则保留原内容,否则替换换行符为@
  return strPart ? strPart : '@';
});

console.log('\n替换后内容:');
console.log(my_code);

正则逻辑说明

正则表达式/("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|(?:\.|[^`\])*`)|(\n)/g`分为两个核心部分:

  • 字符串匹配段:"(?:\\.|[^"\\])*"、'(?:\\.|[^'\\])*'、(?:\\.|[^\])*分别处理双引号、单引号、模板字符串,其中\.匹配转义字符(包括转义引号、转义换行等),[^"\]`匹配非引号非转义的普通字符,确保正确识别被转义引号包裹的字符串。
  • 换行符匹配段:(\n)仅匹配不在字符串内部的实际换行符。

通过回调函数判断匹配结果:若为字符串片段则直接返回原内容,若为外部换行符则替换为@。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:31:01