2012-04-26 37 views
2

嘿大家快速的問題,我知道這聽起來很奇怪,在JavaScript中做,但我有很好的使用它。我需要能夠解析在textarea中傳遞的字符串,使得轉義的十六進制文字「\ x41」或任何不是被處理爲四個字符'\''x''4''1',而是作爲'A'例如:解析javascript中的十六進制文字

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) 

我希望能夠有stringToParse辦法遏制「A」而不是「\ X41」 ......正則表達式以外的任何想法?我會帶一個正則表達式我想,我只是想辦法讓JavaScript的做我的競標:)

+0

我也嘗試過valueOf() – Ryan 2012-04-26 02:10:59

回答

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

實際上,因爲它們應該是十六進制數,'// \ x([a-f0-9] {2})/ gi'也可以工作(並且不區分大小寫)。 – GregL 2012-04-26 02:16:59

+0

@GregL:這很有趣,我以爲a-f,但顯然沒有貫徹。謝謝你的到來,咖啡在這裏耗盡。 ;-) – 2012-04-26 02:17:53

+0

我也喜歡你的方法......謝謝你...... – Ryan 2012-04-26 02:28:19

1

我想通了,雖然它的種類哈克和在字符串

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

主要是我需要這個來解析混合串......與十六進制的

混合:我使用eval:(......如果任何人有一個更好的方式讓我知道3210
+1

Eww,'eval'是邪惡的。 – 2012-04-26 02:32:55

+0

是的......我知道......這就是爲什麼我選擇了另一個...爲我的目的工作......我欣賞幫助傢伙 – Ryan 2012-04-26 02:34:39