2012-04-26 9 views
2

こんにちはみんな簡単に質問しますが、これはjavascriptでこれが奇妙に聞こえるが、私はそれをうまく使います。私は、16進リテラル "\ x41"または4つの文字 '\' 'x' '4' '1'としてではなく 'A'として処理されたものをエスケープするような方法でテキストエリアに渡された文字列を解析できるようにする必要があります。例えば:javascriptで16進リテラルを解析する

var anA = "\x41"; 
console.log(anA); //emits "A" 
var stringToParse = $(#someTextArea).val(); //using jquery for ease not a req 
//lets say that "someTextArea" contains "\x41" 
console.log(stringToParse); // equals "\" "x" "4" "1" -- not what i want 
console.log(new String(stringToParse)); same as last 
console.log(""+stringToParse); still doesnt work 
console.log(stringToParse.toString()); failz all over (same result) 

私は「」ない「の\ X41」を含むようにstringToParseための方法を持つことができるようにしたい...正規表現を超えた任意のアイデア?私は私がちょうどjavascriptのが私の入札を行うようにする方法を望んでいた私は推測する正規表現を取るよ:)

+0

私はまたvalueOf()を試しました – Ryan

答えて

6
String.prototype.parseHex = function(){ 
    return this.replace(/\\x([a-fA-F0-9]{2})/g, function(a,b){ 
     return String.fromCharCode(parseInt(b,16)); 
    }); 
}; 

と実践で:

var v = $('#foo').val(); 
console.log(v); 
console.log(v.parseHex()); 
+1

実際には、それらは16進数でなければならないので、// \ x([a-f0-9] {2})/ gi'も動作します(大文字小文字を区別しません)。 – GregL

+0

@ GregL:面白いですが、私はa-fと思っていましたが、明らかにフォロースルーはありませんでした。それをキャッチしてくれてありがとう、コーヒーはここで不足している。 ;-) –

+0

私はあなたの方法も好きです...ありがとう... – Ryan

1

私はハックのであるが、その種を、それを考え出したと私はevalを使用します(誰もがより良い方法を持っている場合...私に教えて:

stringToParse = stringToParse.toSource().replace("\\x", "\x"); 
stringToParse = eval(stringToParse); 
console.log(stringToParse); 

主に私は

で混合進の文字列リテラルのように...混在文字列を解析するために、これを必要と3210
+1

Eww、 'eval'は悪です。 –

+0

うん...私は知っている... thatsなぜ私は他の1つを選択...私の目的のために働く...私は助けてくれてありがとう – Ryan