Përdorni shprehje të rregullta për të përputhur Emoji në Strings

Kohët e fundit kam filtruar një afat kohor të gjerë në Twitter për ta analizuar atë duke përdorur një rrjet të thellë nervor. Siç e dini, tweet-et mund të përmbajnë lloje të ndryshme të përmbajtjes, duke përfshirë emoji. Pra, një nga hapat e parë ishte pastrimi i të dhënave, në këtë rast duke hequr të gjitha emoticonat nga afati kohor.

Edhe pse kjo mund të bëhet në shumë mënyra, unë do të tregoj se si ta bëjmë atë me JavaScript sepse është i drejtpërdrejtë dhe i shpejtë, kështu që le të fillojmë.

Siç mund ta merrni me mend nga nëntitulli i këtij postimi, ne do të përdorim shprehje të rregullta për ta bërë atë.

Shfletuesit modernë mbështesin pronën Unicode, e cila ju lejon të përputhni emoji bazuar në përkatësinë e tyre në kategorinë Emoji Unicode. Për shembull, mund të përdorni ikjet e vetive të Unicode si \p{Emoji}ose \P{Emoji}për të përputhur/nuk përputhen me karakteret emoji. Vini re se 0123456789#* dhe karaktere të tjera interpretohen si emoji duke përdorur kategorinë e mëparshme Unicode. Prandaj, një mënyrë më e mirë për ta bërë këtë është përdorimi i kategorisë {Extended_Pictographic} Unicode që tregon të gjithë personazhet që zakonisht kuptohen si emoji në vend të kategorisë {Emoji}.

Le të shohim disa shembuj.

Përdorni \p{} për të përputhur karakteret e Unicode

Nëse përdorni kategorinë Unicode "Emoji", mund të merrni rezultate të pasakta:

const withEmojis = /\p{Emoji}/u
withEmojis.test('😀');  
//true
withEmojis.test('ab');
//false
withEmojis.test('1');  
//true  opps!

Prandaj është më mirë të përdoret skema Extended_Pictographic siç u përmend më parë:

const withEmojis = /\p{Extended_Pictographic}/u
withEmojis.test('😀😀'); 
//true
withEmojis.test('ab');
//false
withEmojis.test('1');
//false

Përdorni \P{} për të mohuar përputhjen.

const noEmojis = /\P{Extended_Pictographic}/u
noEmojis.test('😀'); 
//false
noEmojis.test('1212');
//false

Siç mund ta shihni, kjo është një mënyrë e thjeshtë për të zbuluar Emoji, por nëse përdorni regex-in tonë të mëparshëm withEmojis me një emoji të grupuar, do të habiteni nga rezultati.

const withEmojis = /\p{Extended_Pictographic}/ug
const familyEmoji = '👨‍👩‍👧' 
console.log(familyEmoji.length) 
//8
console.log(withEmojis.test(familyEmoji))
//true
console.log(familyEmoji.match(withEmojis))
//(3) ['👨', '👩', '👧']
familyEmoji.replaceAll(withEmojis,'*');
//*** opps!

Siç mund ta shihni, nëse përdorni metodën "replaceAll" me shprehjen tonë regex, ju merrni tre: ‹***› në vend të një "‹*.› Kjo sjellje ndodh sepse Emoji i grupuar përkthehet si një simbol i vetëm, por përbëhet me më shumë se një pikë kodi.

Kalimet përfundimtare

Për të shmangur këtë dhe sjellje të tjera të rralla, mund të përdorni biblioteka si emoji-regex nga Mathias bynen. Kjo bibliotekë ofron një shprehje të rregullt për të përputhur të gjitha simbolet dhe sekuencat e emoji (duke përfshirë paraqitjet tekstuale të Emoji) sipas standardit Unicode.

Nëse ju pëlqeu ky artikull, merrni parasysh të abonoheni në Medium përmes "profilit" tim. Faleminderit!

Referencat



https://github.com/mathiasbynens/emoji-regex