首页 > 解决方案 > 在多行字符串上使用八进制字符

问题描述

我必须读取一个 .csv 文件并为每个数据条目创建一个多行字符串。每个条目都需要写入 .xml 文件。

每个条目都有一个预定义的格式,即

在此处输入图像描述

https://pastebin.com/RyT31gJX

这是我到目前为止所拥有的

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

    // create a multiline string that's gets written to a .xml file
    const xmlEntry = `
    sip isdn    t:${login}  g:Avaya (.*)    +${internal}    (.*)    \1  from_pstn_src_setting=
    isdn    sip g:Avaya p:${login}  (.*)    \1  0${convertedInternal}   \1  
    `;
})
.on('end',() => {
    // done
});

执行代码时出现错误

SyntaxError:在严格模式下不允许八进制转义序列。

我该如何解决?

那么所需的多行字符串格式很重要。

标签: javascriptnode.js

解决方案


您可以String.raw改用,它将完全按照类型解释字符串(加上插值变量):

const xmlEntry = String.raw`
    sip isdn    t:${login}  g:Avaya (.*)    +${internal}    (.*)    \1  from_pstn_src_setting=
    isdn    sip g:Avaya p:${login}  (.*)    \1  0${convertedInternal}   \1  
`;

或者,当然,双转义反斜杠,这样它们就不会被解释为八进制转义:

const xmlEntry = `
    sip isdn    t:${login}  g:Avaya (.*)    +${internal}    (.*)    \\1  from_pstn_src_setting=
    isdn    sip g:Avaya p:${login}  (.*)    \\1  0${convertedInternal}   \\1  
`;

推荐阅读