2016-09-03 14 views
0

これを正しくフレーズする方法がわかりません。基本的に、私は「エスケープ対象」の文字、バックスラッシュで構成される文字列を取り、実際のエスケープ形式に変換したい:私は何をしようとしているJavaScriptの文字を手動でエスケープする方法

console.log(magicStringFunction('\\n') === '\n') // true 

が効果的String.rawの逆です:

console.log(String.raw`\n` === '\\n') // true 

は、私は技術的にevalでこれを行うことができますことを認識しています:

console.log(eval('"\\n"')); // \n 

しかし、私は一般的にはevalを使用しないようにしたいと。ネイティブコードでこれを行う方法はありますか?

答えて

0

回答が見つかりました!質問をする前にちょっと調べてみる必要があることを示しています。

evalと似ていますが、危険性は低く、もっと速いと思います。

console.log(JSON.parse('"\\n"') === '\n') // true 
+0

ああ、私はあなたが話していたと思いましたオートマトン理論やコンパイラ設計のように、Javascriptの構文分析を開発する。 –

+0

終了しますが、二重引用符 '' 'が渡されたときにあなたの解答が破られます。 –

+0

' '\\ v" 'を解析しようとするとうまくいかないようです。これは "r"、 "n"、 "t"、 "v"、 "f"、 "b"のために働きたいと思っています。 ':JSON.parse(' "\\ '+ char +'" ') ' – jchitel

0

これはあなたの提案された解決策の一つである:

function magicStringFunction(w){ 
    return JSON.parse('"' + w + '"'); 
} 

しかし、これが起こるとき、それは失敗します。

magicStringFunction('"\\n"');  // whoops 

起きてからこれを防ぐバージョン:

function magicStringFunction(w){ 
    return w.replace(/\\./g, function(match){ 
     return JSON.parse('"' + match + '"'); 
    }); 
} 

非常に効率的ではないかもしれませんが、機能します。


それとも、効率のためにJSON.parseの大ファンでない場合は、代わりにこれを行うことができます。

function magicStringFunction(w){ 
    // Defined by Table 34 under section 11.8.4.3 
    // ' " \ b f n r t v 
    var escCharMap = { 
     "\\'": "'", 
     "\\\"": "\"", 
     "\\\\": "\\", 
     "\\b": "\b", 
     "\\f": "\f", 
     "\\n": "\n", 
     "\\r": "\r", 
     "\\t": "\t", 
     "\\v": "\v" 
    }; 

    return w.replace(/\\./g, function(match){ 
     if(escCharMap.hasOwnProperty(match)) return escCharMap[match]; 
     else         return match.substr(1, 1); 
    }); 
} 

参考:http://www.ecma-international.org/ecma-262/7.0/index.html#prod-SingleEscapeCharacter

関連する問題