如何将 javascript regexp 中的 Euro € 符号与八进制、十六进制或 unicode 元字符匹配?
Posted
技术标签:
【中文标题】如何将 javascript regexp 中的 Euro € 符号与八进制、十六进制或 unicode 元字符匹配?【英文标题】:How to match Euro € sign in javascript regexp with octal, hexadecimal or unicode metacharacter? 【发布时间】:2017-07-21 12:36:48 【问题描述】:我需要创建在正则表达式中使用的十六进制和八进制元字符示例。我在 Internet link 上发现 € 的八进制代码是 200
,十六进制是 80
,但是当我尝试将 € 与正则表达式 \200
和 \x80
匹配时,它与 € 符号不匹配。只有 unicode 元字符 \u20AC
可以正常工作。我的代码是否错误,或者无法将欧元符号与八进制和十六进制元字符匹配?我以前没有遇到过其他角色的这种问题。
var a = "200€"
console.log(a.search(/\200/g)); //-1
console.log(a.search(/\x80/g)); //-1
console.log(a.search(/\u20AC/g)); //3
【问题讨论】:
在链接中您提供的八进制值是 200 而不是 128。数字 8 在八进制系统中不是有效值 已更正,谢谢 可能是一个错误,它适用于£
符号。 link
【参考方案1】:
正如我刚刚发现的,以 磅 £
为例,磅 £
的 unicode 为 00A3
或缩短为 A3
,可在 javascript 正则表达式中用作\u00A3
四个十六进制数字元字符或\xA3
两个十六进制数字元字符。 A3
十六进制数解析为八进制数等于 243
这意味着 \243
作为 三个八进制数 元字符也匹配 £
。 €
的问题在于它的 unicode 是 20AC
这意味着它可以用作 \u20AC
四个十六进制数字元字符,但它不能缩短为 two十六进制数字,而它不以 00
开头。 20AC
解析为八进制等于 20254
是什么原因导致它也不能用作 三个八进制数字。
综上所述,只有能用两位十六进制码表示的字符才能匹配为\xdd
正则表达式元字符,只有能用三位八进制码表示的字符才能匹配为@987654338 @。所以 € U+20AC
, ❤ U+2764
, ☯ U+262F
, ❄ U+2744
和其他数千个字符只能与 JavaScript 中的 \udddd
元字符匹配。
【讨论】:
【参考方案2】:在 Unicode 中,欧元符号的代码点是 U+20AC,而不是 U+0080。有一些 8 位编码使用 0x80 作为欧元符号,特别是 Windows-1252,但这与 Unicode 无关。在 JavaScript 中,根本无法将欧元符号与 8 位十六进制或八进制转义序列匹配。
【讨论】:
【参考方案3】:试试这个纯 javascript hack (lalz):
var txt = 'This will cost 3€';
console.log(encodeURI(txt).indexOf('%E2%82%AC'));
【讨论】:
【参考方案4】:看起来可能是某种错误。
console.log("Euro symbol: \x80");
console.log("Pound symbol: \xA3");
【讨论】:
以上是关于如何将 javascript regexp 中的 Euro € 符号与八进制、十六进制或 unicode 元字符匹配?的主要内容,如果未能解决你的问题,请参考以下文章