2016-06-27 11 views
0

私は、次のようなバックスラッシュのエスケープシーケンスが含まれた文字列があります。それは、それを用いたバックスラッシュエスケープシーケンスを解釈することを解析するための簡単な方法はありは道の文字列を()はシーケンス

AB\0C\xff 

を上記のようにバイト列が生成されるようなJavaScript文字列解析ルールを作成します。

0x41 0x42 0x00 0x43 0xff 

私はString(line)を試しましたが、もちろんそれは効果がありませんでした。

FWIWは、ここで私が後だものを実証するために、短いNode.jsのプログラムです:

'use strict' 

const readline = require('readline'); 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    terminal: false 
}); 

rl.on('line', function(line) { 
    processLine(line); 
}); 

function hexify(line) { 
    function hex(v) { 
    return ((v < 16) ? '0' : '') + v.toString(16); 
    }; 
    var s=[]; 
    for (var i=0; i<line.length; i++) { 
    s.push(hex(line.charCodeAt(i))); 
    }; 
    return s.join(' '); 
} 

function honorEscapes(line) { 
    return String(line);   // this doesn't do what I want 
}; 

function processLine(line) { 
    console.log('raw ' + hexify(line)); 
    console.log('parsed ' + hexify(honorEscapes(line))); 
}; 

がそれを実行:

$ node escape.js 
AB\0\C\xff 
raw 41 42 5c 30 5c 43 5c 78 66 66 
parsed 41 42 5c 30 5c 43 5c 78 66 66 

答えて

1

あなたはJSON.parseを探しているかもしれない、エスケープを含むJSON stringsを解析しました文字。

もちろん、それはすべての奇妙なエスケープを包含していませんJavaScript string literals。必要なものに応じて、たとえば正規表現を使用して手動で追加します。

.replace(/\\0/g, '\u0000') 
.replace(/\\x([0-9a-fA-F]{2})/g, function(m, c) { return String.fromCharCode(parseInt(c, 16)); } 
+0

この作品はどのように作ったのですか?たぶん私は何かが不足しているかもしれませんが、 'JSON.parse( '" AB \ 0 \ C \ xff "')' => 'SyntaxError:文字列の' 0'で予期しない数値。 –

+0

ああ、JSONではJavaScriptの文字列リテラルで許される奇妙な種類の文字エスケープが許可されていません。ヌルエスケープと16進エスケープを必要に応じて手動で評価する必要があります。正規表現を使用して、/ regex( '\ \ 0/g、 '\ u0000'戻り値String.fromCharCode(parseInt(c、16));}) ') – Bergi

+0

ああ - 私は参照してください。 'JSON.parse( 'AB \ u0000C \ u00ff"') 'はちょっとしたPITAか、提案した行に沿った前処理です。あなたはあなたのコメントを編集された回答に昇格させるとは何ですか? :) –

関連する問題