Unicode:如何获取字符的所有代码点,例如ã(所以它可以在JavaScript正则表达式中使用)?

时间:2015-10-06 13:53:58

标签: javascript regex unicode

我的Unicode相关词汇不是很好,很抱歉这个冗长的问题。

ã这样的字符可以用\u00e3(带有代字号的拉丁字母小写字母)或\u0061(拉丁字母小写字母a)与组合变音符号{{1 (组合波浪号)。现在,在Java中,为了匹配任何Unicode字母,我会寻找\u0303,但JavaScript不明白,所以我必须寻找单个代码点([\p{L}] )。我怎样才能从ã开始,找出用Unicode表示的各种方式,这样我就可以用\unnnn格式将它们包含在我的正则表达式中?

1 个答案:

答案 0 :(得分:2)

  

我如何从一个ã开始,并弄清楚它可以用Unicode表示的各种方式

您正在寻找Unicode Equivalence

您提到的两种表单是composed formdecomposed form。要获取cannonically equivalent Unicode表单,您可以使用String.prototype.normalize()

  • 重要提示:检查link浏览器兼容性。

str.normalize([form])接受以下表格:

  • NFC - 规范化形式Canonical Composition。
  • NFD - 规范化形式Canonical Decomposition。
  • NFKC - 标准化形式兼容性组合。
  • NFKD - 规范化形式兼容性分解。
  

在打印或显示时,假定定义为规范等效的代码点序列具有相同的外观和含义。

     

假定定义为兼容的序列可能具有不同的外观,但在某些情况下具有相同的含义。

Quote from Wikipedia

- 选择你喜欢的等价形式

例如,使用兼容性表单中的Latin small letter a with tilde

var char = "ã";
var nfkc = char.normalize('NFKC');
var nfkd = char.normalize('NFKD');

// Returns bytes as Unicode escaped sequences
function escapeUnicode(str){
    var i;
    var result = "";
    for( i = 0; i < str.length; ++i){
        var c = str.charCodeAt(i);
        c = c.toString(16).toUpperCase();
        while (c.length < 4) {
            c = "0" + c;
        }
        result += "\\u" + c;
    }
    return result;
}

var char = "ã";
var nfkc = char.normalize('NFKC');
var nfkd = char.normalize('NFKD');

document.write('<br />NFKC: ' + escapeUnicode(nfkc));
document.write('<br />NFKD: ' + escapeUnicode(nfkd));