如何将 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 元字符匹配?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的正则表达式(终结篇)

javascript RegExp 对象的方法

初入javascript知识点

Javascript中的RegExp

javascript正则表达式(RegExp)简述

JavaScript -- 时光流逝:js中的正则表达式 -- RegExp 对象