

Latexエディターを制作しており、そこでファイル書き込み処理に苦戦しているのでご教授お願いしたいです。  
ユーザーが入力したテキストデータをjson形式でサーバーにpost送信し、サーバー側でtexファイルを作成するときにテキストデータに含まれる特殊文字`\\`を`\`に変換して.texファイルに書き込みたいです。

postするjsonデータの一部(見やすいように改行しております)

[code]

    "\\documentclass{jsarticle}\n
    \\usepackage[dvipdfmx]{graphicx}\n
    \\setlength{\\textheight}{24cm}\n
    \\setlength{\\topmargin}{-1.5cm}\n
    \\setlength{\\textwidth}{17cm}\n
    \\setlength{\\oddsidemargin}{-.5cm}\n
    \\usepackage{here}\n
    ......
    
[/code]

サーバー側で作成した.texファイル

[code]

    "\\documentclass{jsarticle}
    \\usepackage[dvipdfmx]{graphicx}
    \\setlength{\\textheight}{24cm}
    \\setlength{\\topmargin}{-1.5cm}
    \\setlength{\\textwidth}{17cm}
    \\setlength{\\oddsidemargin}{-.5cm}
    \\usepackage{here}
    ....
    
[/code]

作成したtexファイルに上記のような`\\`の書き込みになってしまい、本来のlatexの書き方と違ってきます......。

理想は以下のようtexファイルに書き込みたいです。

[code]

    "\documentclass{jsarticle}
    \usepackage[dvipdfmx]{graphicx}
    \setlength{\textheight}{24cm}
    \setlength{\topmargin}{-1.5cm}
    \setlength{\textwidth}{17cm}
    \setlength{\oddsidemargin}{-.5cm}
    \usepackage{here}
    ....
    
[/code]

現在サーバー側でデータを受け取り、ファイル作成している処理コードは以下です。

[code]

    jsonData = JSON.stringify(req.body.msg);
      console.log(jsonData);
      var arr = jsonData.split(/\\n/);
      for (var i = 0; i < arr.length; i++){
        console.log(arr[i]);
        //arr[i] = arr[i].replace(/\\/g, '');
        fs.appendFileSync('sample.tex', arr[i] + '\n', function (err) {
          console.log(err);
        });
      }
    
[/code]

msgにすべてのテキストデータが入っています。うまくできないのでコメントアウトしております。  
なんとかtexファイルに`\`を書き込むことはできないでしょうか？  
よろしくお願いいたします<(_ _)>

**＜追記＞**  
エディターでは以下のように入力しています。

[code]

    \documentclass{jsarticle}
    \usepackage[dvipdfmx]{graphicx}
    \setlength{\textheight}{24cm}
    \setlength{\topmargin}{-1.5cm}
    \setlength{\textwidth}{17cm}
    \setlength{\oddsidemargin}{-.5cm}
    \usepackage{here}
    ....
    
[/code]

クライアント側で以下のコードで、テキストデータを送信しております。  
＊Aceを使いエディターを作成しております。

[code]

    $('#save').click(function(e) {
          //alert(editor.getValue());
          $.ajax({
            url: 'http://localhost:3000/editor',
            type: 'post',
            data: {'msg': editor.getValue()},
            dataType: 'json'
          });
        });
    
[/code]

editor.getValue()に入力されたデータが入っており、中身は以下のようになっております。

[code]

    "\\documentclass{jsarticle}
    \\usepackage[dvipdfmx]{graphicx}
    \\setlength{\\textheight}{24cm}
    \\setlength{\\topmargin}{-1.5cm}
    \\setlength{\\textwidth}{17cm}
    \\setlength{\\oddsidemargin}{-.5cm}
    \\usepackage{here}
    ......"
    
[/code]

これをそのままjsonデータとして送信しているので、`\\`がついたままtexファイルを作成されるのだと思っております。


CC BY-SA 4.0
2018-12-04T14:28:57.607
50905
2018-12-04T15:47:00.983
2018-12-04T15:47:00.983
31291
31291
question
javascript node.js json 正規表現
Node.jsによるファイル書き込み時の特殊文字処理について


> サーバー側でtexファイルを作成する

とのことですが、このtexファイルは「ユーザーの入力したものをそのままファイルとして保存したい」ということで間違いないでしょうか。

そして、ユーザーの入力したものがそのままJSON形式で`req.body.msg`に入っているのであれば、`JSON.parse`を用いることで、JSON形式の文字列からユーザーが入力した元々の文字列を復元することができます。

つまり、これだけでいいのではないかと思います。

[code]

    jsonData = JSON.parse(req.body.msg);
    // jsonDataにユーザーが入力した文字列が入っている
    console.log(jsonData);
    
    fs.writeFileSync('sample.tex', jsonData, function (err) {
      console.log(err);
    });
    
[/code]

ただし、実際にはユーザーがJSON形式ではない変なデータを送ってきて`JSON.parse`でエラーが発生したり`JSON.parse`の結果が文字列でない可能性もありますので、その対処も必要となります。


CC BY-SA 4.0
2018-12-04T14:50:21.483
50907
2018-12-04T14:50:21.483
30079
50905
answer