在多行字符串上使用八进制字符

时间:2019-02-27 11:04:29

标签: javascript node.js

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

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

enter image description here

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:严格模式下不允许八进制转义序列。

我该如何解决?

然后,必需的多行字符串格式很重要。

1 个答案:

答案 0 :(得分:1)

您可以改用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  
`;