Baseline Widely available
String
ç normalize()
æ¹æ³è¿å该å符串ç Unicode æ ååå½¢å¼ã
const name1 = "\u0041\u006d\u00e9\u006c\u0069\u0065";
const name2 = "\u0041\u006d\u0065\u0301\u006c\u0069\u0065";
console.log(`${name1}, ${name2}`);
// Expected output: "Amélie, Amélie"
console.log(name1 === name2);
// Expected output: false
console.log(name1.length === name2.length);
// Expected output: false
const name1NFC = name1.normalize("NFC");
const name2NFC = name2.normalize("NFC");
console.log(`${name1NFC}, ${name2NFC}`);
// Expected output: "Amélie, Amélie"
console.log(name1NFC === name2NFC);
// Expected output: true
console.log(name1NFC.length === name2NFC.length);
// Expected output: true
è¯æ³
normalize()
normalize(form)
åæ°
form
å¯é
æ¯ "NFC"
ã"NFD"
ã"NFKC"
æ "NFKD"
å
¶ä¸ä¹ä¸ï¼ç¨äºæå® Unicode æ ååå½¢å¼ã妿çç¥æä¸º undefined
ï¼åä½¿ç¨ "NFC"
ã
è¿äºå¼å ·æä»¥ä¸å«ä¹ï¼
"NFC"
è§èåè§£ï¼ç¶åè¿è¡è§èç»åã
"NFD"
è§èåè§£ã
"NFKC"
å ¼å®¹åè§£ï¼ç¶åè¿è¡è§èç»åã
"NFKD"
å ¼å®¹åè§£ã
ä¸ä¸ªå å«ç»å®å符串ç Unicode æ ååå½¢å¼çå符串ã
å¼å¸¸RangeError
妿 form
䏿¯ä¸è¿°æå®çå¼ä¹ä¸ï¼å°æåºè¯¥å¼å¸¸ã
Unicode 为æ¯ä¸ªå符åé
ä¸ä¸ªå¯ä¸çæ°å¼ï¼ç§°ä¸ºç ä½ãä¾å¦ï¼åæ¯ "A"
çç ä½è¢«è¡¨ç¤ºä¸º U+0041ãç¶èï¼ææ¶åä¸ä¸ªæ½è±¡å符å¯ä»¥ç±ä¸ä¸ªæå¤ä¸ªç 使ç ä½åºåæ¥è¡¨ç¤ºï¼æ¯å¦åæ¯ "ñ"
å¯ä»¥è¢«ä»¥ä¸ä»»æä¸ç§æ¹å¼è¡¨ç¤ºï¼
"n"
çç ä½ï¼U+006Eï¼åè·ç»å波浪符çç ä½ï¼U+0303ï¼ãconst string1 = "\u00F1";
const string2 = "\u006E\u0303";
console.log(string1); // ñ
console.log(string2); // ñ
ç¶èï¼ç±äºç ä½ä¸åï¼å符串æ¯è¾ä¸ä¼å°å®ä»¬è§ä¸ºç¸çãèä¸ç±äºæ¯ä¸ªçæ¬ä¸çç 使°éä¸åï¼å®ä»¬çè³å ·æä¸åçé¿åº¦ã
const string1 = "\u00F1"; // ñ
const string2 = "\u006E\u0303"; // ñ
console.log(string1 === string2); // false
console.log(string1.length); // 1
console.log(string2.length); // 2
normalize()
æ¹æ³å°å符串转æ¢ä¸ºä¸ç§æ ååå½¢å¼ï¼è¿æå©äºè§£å³è¿ä¸ªé®é¢ï¼è¯¥æ ååå½¢å¼éç¨äºè¡¨ç¤ºç¸ååç¬¦çææç ä½åºåãæä¸¤ç§ä¸»è¦çæ ååå½¢å¼ï¼ä¸ç§åºäºè§èçä»·æ§ï¼å¦ä¸ç§åºäºå
¼å®¹æ§ã
å¨ Unicode ä¸ï¼å¦æä¸¤ä¸ªç ä½åºå表示ç¸åçæ½è±¡å符ï¼å¹¶ä¸å®ä»¬åºè¯¥å§ç»å ·æç¸åçè§è§å¤è§åè¡ä¸ºï¼ä¾å¦ï¼å®ä»¬åºè¯¥å§ç»ä»¥ç¸åçæ¹å¼è¿è¡æåºï¼ï¼åè¿ä¸¤ä¸ªåºåå ·æè§èçä»·æ§ã
ä½ å¯ä»¥ä½¿ç¨ normalize()
æ¹æ³å¹¶ä½¿ç¨ "NFD"
æ "NFC"
åæ°æ¥çæä¸ä¸ªå符串çå½¢å¼ï¼è¯¥å½¢å¼å¯¹äºææè§èçä»·çåç¬¦ä¸²é½æ¯ç¸åçãå¨ä¸é¢ç示ä¾ä¸ï¼æä»¬å¯¹å符 "ñ"
ç两ç§è¡¨ç¤ºè¿è¡æ ååï¼
let string1 = "\u00F1"; // ñ
let string2 = "\u006E\u0303"; // ñ
string1 = string1.normalize("NFD");
string2 = string2.normalize("NFD");
console.log(string1 === string2); // true
console.log(string1.length); // 2
console.log(string2.length); // 2
ç»ååå解形å¼
请注æï¼å¨ "NFD"
ä¸ï¼æ ååå½¢å¼çé¿åº¦ä¸º 2
ãè¿æ¯å 为 "NFD"
ç»åºäºè§èå½¢å¼çåè§£çæ¬ï¼å
¶ä¸å个ç ä½è¢«æå为å¤ä¸ªç»åç ä½ãå¯¹äº "ñ"
ï¼å
¶åè§£çè§è形弿¯ "\u006E\u0303"
ã
ä½ å¯ä»¥æå® "NFC"
æ¥è·åç»åçè§èå½¢å¼ï¼å
¶ä¸å¤ä¸ªç ä½å¨å¯è¡çæ
åµä¸è¢«æ¿æ¢ä¸ºå个ç ä½ãå¯¹äº "ñ"
ï¼å
¶ç»åçè§è形弿¯ "\u00F1"
ï¼
let string1 = "\u00F1"; // ñ
let string2 = "\u006E\u0303"; // ñ
string1 = string1.normalize("NFC");
string2 = string2.normalize("NFC");
console.log(string1 === string2); // true
console.log(string1.length); // 1
console.log(string2.length); // 1
console.log(string2.codePointAt(0).toString(16)); // f1
å
¼å®¹æ åå
å¨ Unicode ä¸ï¼å¦æä¸¤ä¸ªç ä½åºå表示ç¸åçæ½è±¡å符ï¼å¹¶ä¸å¨æäºï¼ä½ä¸ä¸å®æ¯ææï¼åºç¨ç¨åºä¸åºè¯¥è¢«ç±»ä¼¼å°å¤çï¼åè¿ä¸¤ä¸ªåºåæ¯å ¼å®¹çã
ææè§èçä»·çåºå乿¯å ¼å®¹çï¼ä½åä¹ä¸æç«ã
ä¾å¦ï¼
"ï¬"
ãå®ä¸è¿ç»ç两个ç ä½ U+0066ï¼"ff"
ï¼å
¼å®¹ã"â¹"
ãå®ä¸ç ä½ U+0044ï¼"D"
ï¼å
¼å®¹ãå¨æäºæ¹é¢ï¼ä¾å¦æåºï¼å®ä»¬åºè¯¥è¢«è§ä¸ºçä»·çï¼èå¨æäºæ¹é¢ï¼ä¾å¦è§è§å¤è§ï¼åä¸åºè¯¥ï¼å æ¤å®ä»¬ä¸æ¯è§èçä»·çã
ä½ å¯ä»¥ä½¿ç¨ normalize()
æ¹æ³å¹¶ä½¿ç¨ "NFKD"
æ "NFKC"
åæ°æ¥çæä¸ä¸ªå符串çå½¢å¼ï¼è¯¥å½¢å¼å¯¹äºææå
¼å®¹çåç¬¦ä¸²é½æ¯ç¸åçï¼
let string1 = "\uFB00";
let string2 = "\u0066\u0066";
console.log(string1); // ï¬
console.log(string2); // ff
console.log(string1 === string2); // false
console.log(string1.length); // 1
console.log(string2.length); // 2
string1 = string1.normalize("NFKD");
string2 = string2.normalize("NFKD");
console.log(string1); // ff <- è§è§å¤è§æ¹åäº
console.log(string2); // ff
console.log(string1 === string2); // true
console.log(string1.length); // 2
console.log(string2.length); // 2
å¨åºç¨å
¼å®¹æ§æ ååæ¶ï¼éè¦çæ¯è¦èèä½ æç®å¦ä½ä½¿ç¨è¿äºå符串ï¼å 为æ ååå½¢å¼å¯è½ä¸éç¨äºææåºç¨ç¨åºãå¨ä¸é¢ç示ä¾ä¸ï¼æ ååéç¨äºæç´¢ï¼å 为å®ä½¿ç¨æ·å¯ä»¥éè¿æç´¢ "f"
æ¥æ¾å°å符串ã使¯ï¼å¯¹äºæ¾ç¤ºæ¥è¯´å¯è½ä¸åéï¼å 为è§è§è¡¨ç¤ºæ¯ä¸åçã
ä¸è§èåæ åå䏿 ·ï¼ä½ å¯ä»¥éè¿åå«ä¼ é "NFKD"
æ "NFKC"
æ¥è¯·æ±åè§£æç»åçå
¼å®¹å½¢å¼ã
// åå§å符串
// U+1E9B: 䏿¹å¸¦ä¸ä¸ªç¹çæä¸å°ååæ¯é¿ S
// U+0323: 䏿¹ç»åä¸ä¸ªç¹
const str = "\u1E9B\u0323";
// è§èç»åå½¢å¼ï¼NFCï¼
// U+1E9B: 䏿¹å¸¦ä¸ä¸ªç¹çæä¸å°ååæ¯é¿ S
// U+0323: 䏿¹ç»åä¸ä¸ªç¹
str.normalize("NFC"); // '\u1E9B\u0323'
str.normalize(); // åä¸
// è§èå解形å¼ï¼NFDï¼
// U+017F: æä¸å°ååæ¯é¿ S
// U+0323: 䏿¹ç»åä¸ä¸ªç¹
// U+0307: 䏿¹ç»åä¸ä¸ªç¹
str.normalize("NFD"); // '\u017F\u0323\u0307'
// å
¼å®¹ç»åï¼NFKCï¼
// U+1E69: æä¸å°å忝 S å¨ä¸æ¹å䏿¹å¸¦ä¸ä¸ªç¹
str.normalize("NFKC"); // '\u1E69'
// å
¼å®¹åè§£ï¼NFKDï¼
// U+0073: æä¸å°å忝 S
// U+0323: 䏿¹ç»åä¸ä¸ªç¹
// U+0307: 䏿¹ç»åä¸ä¸ªç¹
str.normalize("NFKD"); // '\u0073\u0323\u0307'
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4