2017-12-17 27 views
1

DOMから取得したJavaScript文字列値を補間するにはどうすればよいですか?文字列エスケープ文字の補間

は私のような値\033[1m\033[0\n\n\033[1;33;42mとテキスト領域を取ると言う:

var inOne = document.getElementById("textArea").value; 
var inTwo = "\033[1m\033[0\n\n\033[1;33;42m"; 
console.log(JSON.stringify(inOne)); 
console.log(JSON.stringify(inTwo)); 

とコンソール:inTwoは私が望む真の値であることを特徴とする請求

> "\\033[1m\\033[0\\n\\n\\033[1;33;42m" 
> "\u001b[1m\u001b[0\n\n\u001b[1;33;42m" 

は、どのように私はinOne === inTwoを達成することができますか?

この値はユーザー入力であり、評価したくありません。

+0

したがって、ユーザーはinTwoの内容を推測しますか? – zer00ne

+0

いいえ、私は 'inTwo'と同等である方法で' inOne'をプログラム的に変換したいと思っています。 – Vetsin

+0

両方の行がANSIではありませんか? – zer00ne

答えて

1

あなたは正規表現を使ってエスケープシーケンスを解析し、javascriptの対応する文字に変換することができます。 サンプルコード:

var r = /\\([\d]{3})/gi;//regex to parse octal numbers 
var r2 = /\\([a-z])/gi;//regex to parse escape char sequence e.g. \t, \n etc 

inOne = inOne.replace(r, (reg,grp)=>{ 
          return String.fromCharCode(parseInt(grp,8)); }); 

inOne = inOne.replace(r2, (reg, grp)=>{ 
          return JSON.parse("\"\\"+grp+"\""); }); 

同様にあなたが同様の解析ユニコードと進数を処理するコードを含めることができます。