处理CSV转XML多行字符串时,如何修复严格模式八进制转义错误?
修复严格模式下的Octal escape sequences错误
错误原因
你碰到的SyntaxError: Octal escape sequences are not allowed in strict mode,根源很直接:模板字符串里的\1被JavaScript当成了八进制转义字符(对应ASCII码为1的控制字符),而严格模式下明确禁止这类八进制转义写法。但你这里的\1是正则表达式里的反向引用,本来应该作为字符串内容保留下来,而不是被JS提前解析成特殊字符。
修复方案
只需要把模板字符串里的单个反斜杠\改成双反斜杠\\就行。这样JS会把\\1解析成字符串里的\1,既完美保留了你需要的正则反向引用格式,又不会触发严格模式的错误,同时还能维持你要求的多行字符串结构。
修改后的完整代码
const fs = require('fs'); const csv = require('fast-csv'); const { csvPath, delimiter } = require('./config.json'); fs.createReadStream(csvPath) .pipe(csv({ delimiter })) .on('data', data => { const login = data[0]; const firstname = data[1]; const lastname = data[2]; const internal = data[3]; // 49.... const convertedInternal = internal.slice(2); // remove the 49 from the phonenumber // 修复转义问题,保留多行字符串格式 const xmlEntry = ` sip isdn t:${login} g:Avaya (.*) +${internal} (.*) \\1 from_pstn_src_setting= isdn sip g:Avaya p:${login} (.*) \\1 0${convertedInternal} \\1 `; // 补充写入XML文件的逻辑,原代码未包含这一步 fs.appendFileSync('output.xml', xmlEntry.trim() + '\n'); }) .on('end',() => { console.log('CSV处理完成,XML文件已生成'); });
额外提示
我在代码里补充了写入XML文件的逻辑(用fs.appendFileSync),原代码只生成了xmlEntry但没有实际写入操作,你可以根据数据量大小调整写入方式——如果数据很多,建议用流式写入来避免内存占用过高。
内容的提问来源于stack exchange,提问作者user9945420
相关产品推荐
相关产品推荐

