In JavaScript nu exista intotdeauna o relatie unu-la-unu intre caractere sir si ceea ce un utilizator ar numi o „litera” vizuala separata. Unele simboluri sunt reprezentate de mai multe caractere. Acest lucru poate cauza probleme la divizarea sirurilor si taierea accidentala a unei litere cu mai multe caractere in jumatate sau cand aveti nevoie de numarul real de litere dintr-un sir.

De exemplu, caractere emoji precum „????”, „????”, „????”, „????” si “????” sunt reprezentate de doua caractere JavaScript fiecare (surogat ridicat si surogat scazut). Acesta este,

Emoji-urile combinate sunt chiar mai lungi:

Mai mult, unele limbi includ deseori combinarea marcilor – caractere care sunt folosite pentru a modifica literele dinaintea lor. Exemple obisnuite sunt litera germana u si litera spaniola n. Uneori, ele pot fi reprezentate alternativ atat ca un singur caracter, cat si ca o litera + semn de combinare, cu ambele forme la fel de valabile:

var two = “n”; // doua caractere normalizate n + ◌̃, adica “\ u006E \ u0303”; var one = “n”; // normalizat single-char, adica “\ u00F1” console.log (una! = doua); // tipareste „adevarat”

Normalizarea Unicode, asa cum este realizata de populara biblioteca punycode.js sau String.normalize a ECMAScript 6, poate uneori sa remedieze acele diferente si sa transforme secventele de doua caractere in caractere unice. Dar este nu suficient in toate cazurile. Unele limbi, cum ar fi hindi, utilizeaza pe scara larga combinarea semnelor pe literele lor, care nu au secvente dedicate Unicode unic-punct unic, datorita numarului mare de combinatii posibile. De exemplu, cuvantul hindi „अनुच्छेद” este format din 5 litere si 3 marci de combinare:

अ + न + ु + च + ् + छ + े + द

care este de fapt doar 5 litere percepute de utilizator:

अ + नु + च् + छे + द

si care normalizare Unicode nu s-ar combina corect. Exista, de asemenea, neobisnuite litere + combinatii de combinatii de marci care nu au un punct de cod Unicode dedicat.

porno retro maduras porno casadas españolas
www.maduras.con anal interacial
videos ponos anal maduras españolas
corriendose dentro vieja gorda follando
porno abuelas españolas compilacion mamadas
le pilla pajeandose pilladas de torbes
culos gordos hombres pajeandose
porno fuerte borracha anal
cfnmwave.com cfnmwave.com
porno gay marruecos jovencitas folladoras
porno transexual en español videos porno gay de españoles
follada real follando con las vecinas
masajes porno en español carne de mercado xxx
xxx orgias tetas bailando
intercambio parejas amateur follando en el parque
pelisxxx insesto
paja a desconocido gallega porno
maduros en pajilleros videos madres lesbianas
maduras haciendo pajas metiendo mano en el bus
follando con la abuela jovencitas españolas follando por dinero

Sirul Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘ are, evident, 5 litere separate, dar este, de fapt, alcatuit din 58 de caractere JavaScript, dintre care majoritatea sunt semne combinate.

Introduceti biblioteca grapheme-splitter.js. Poate fi folosit pentru a imparti corect sirurile JavaScript in ceea ce un utilizator uman ar numi litere separate (sau „clustere de grafeme extinse” in terminologia Unicode), indiferent de reprezentarea lor interna. Este o implementare pe limita implicita a graficului graficului UAX # 29.

Puteti utiliza fisierul index.js direct asa cum este. Sau puteti instala grafic-splitter in proiectul dvs. utilizand comanda NPM de mai jos:

$ npm install – save grafic-splitter

Pentru a rula testele pe grafic-splitter, utilizati comanda de mai jos:

Doar initializeaza si foloseste:

var splitter = nou GraphemeSplitter (); // impartiti sirul intr-o matrice de clustere de grafeme (cate un sir fiecare) var grafeme = splitter.splitGraphemes (sir); // iterati sirul la un iterator iterabil de clustere de grafeme (cate un sir fiecare) var grafeme = splitter.iterateGraphemes (sir); // sau faceti acest lucru daca aveti nevoie doar de numarul lor var graphemeCount = splitter.countGraphemes (sir);
var splitter = nou GraphemeSplitter (); // alfabet latin simplu – nimic spectaculos splitter.splitGraphemes (“abcd”); // returneaza [“a”, “b”, “c”, “d”] // emoji cu doua caractere si splitter combinat de sase caractere.splitGraphemes (“?????????????? ??????????? ️‍ ???? “); // returneaza [“????”, “????”, “????”, “????”, “????”, “???? ️‍ ????” ] // diacritice ca marci de combinare, 10 caractere JavaScript splitter.splitGraphemes (“Ĺo͂rȩm̅”); // returneaza [“Ĺ”, “o͂”, “r”, “ȩ”, “m̅”] // caractere coreene individuale (Jamo), 4 caractere JavaScript splitter.splitGraphemes (“뎌쉐”); // returneaza [“뎌”, “쉐”] // Text hindi cu semne combinate, 8 caractere JavaScript splitter.splitGraphemes (“

Divizorul grafem include declaratii TypeScript.

import GraphemeSplitter = require (‘grapheme-splitter’) const splitter = new GraphemeSplitter () const split: string [] = splitter.splitGraphemes (‘Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘! ͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞’)

Aceasta biblioteca este puternic influentata de excelenta biblioteca CoffeeScript de la Devon Govett, la https://github.com/devongovett/grapheme-breaker, cu accent pe usurinta integrarii si implementarea JavaScript pura.