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
この作品はどのように作ったのですか?たぶん私は何かが不足しているかもしれませんが、 'JSON.parse( '" AB \ 0 \ C \ xff "')' => 'SyntaxError:文字列の' 0'で予期しない数値。 –
ああ、JSONではJavaScriptの文字列リテラルで許される奇妙な種類の文字エスケープが許可されていません。ヌルエスケープと16進エスケープを必要に応じて手動で評価する必要があります。正規表現を使用して、/ regex( '\ \ 0/g、 '\ u0000'戻り値String.fromCharCode(parseInt(c、16));}) ') – Bergi
ああ - 私は参照してください。 'JSON.parse( 'AB \ u0000C \ u00ff"') 'はちょっとしたPITAか、提案した行に沿った前処理です。あなたはあなたのコメントを編集された回答に昇格させるとは何ですか? :) –