2017-03-01 32 views
4

我需要创建正则表达式中使用的十六进制和八进制元字符的样本。我在因特网link上发现欧元的八进制代码是200而十六进制是80,但是当我尝试将欧元与正则表达式\200\x80相匹配时,它与欧元符号不匹配。只有unicode元字符\u20AC工作正常。我是否有错误的代码,或者不可能将欧元符号与oct和hex元字符匹配?我以前没有遇到过其他人物的这种问题。如何匹配欧元€登录javascript正则表达式与八进制,十六进制或unicode元字符?

var a = "200€" 
 

 
console.log(a.search(/\200/g));  //-1 
 
console.log(a.search(/\x80/g));  //-1 
 
console.log(a.search(/\u20AC/g)); //3

+0

在链接中提供的八进制值是200而不是128.数字8在八进制系统中不是有效值 –

+0

已更正,谢谢 –

+0

可能是一个错误,它适用于'£'符号。 [链接](https://regex101.com/r/upB82L/1) – sudoman

回答

-1

试试这个纯JavaScript破解(lalz):

var txt = 'This will cost 3€'; 
console.log(encodeURI(txt).indexOf('%E2%82%AC')); 
-1

看起来它可能是某种错误的。

console.log("Euro symbol: \x80"); 
 
console.log("Pound symbol: \xA3");

1

正如我刚刚发现,考虑作为一个例子£,磅£的unicode是00A3或缩短A3可在JavaScript的regexp用作\u00A3{四个十六进制数字元字符}\xA3{两个十六进制数字元字符}A3解析为八进制数的十六进制数等于243这意味着什么\243{三个八进制数字}元字符也匹配£。与的问题是,它的Unicode是20AC什么手段,它可以作为\u20AC{四个十六进制数字的元字符},但它不能被缩短至{两个十六进制数字}虽然它不00开始。 20AC解析为八进制等于20254是什么原因导致它不能用作{三个八进制数字}。总而言之,只有可以用两位十六进制表示的字符能够与\xdd正则表达式元字符相匹配,并且只有可以用三位八进制表示的字符能够被匹配为\ddd。因此,在0126中,,❤U+2764,☯U+262F,❄U+2744以及其他数千个字符只能与\udddd元字符匹配。

0

在Unicode中,欧元符号的代码点是U + 20AC,而不是U + 0080。有一些8位编码使用欧元符号0x80,特别是Windows-1252,但这与Unicode无关。根本没有办法在JavaScript中将欧元符号与8位十六进制或八进制转义序列相匹配。

相关问题