remplacer emoji unicode symbole à l'aide de regexp dans javascript
Comme vous le savez tous emoji symboles sont codées jusqu'à 3 ou 4 octets, de sorte qu'il peut occuper 2 symboles dans mon string. Par exemple, " 😁la marche internationale😁'.longueur = 7
Je veux trouver ces symboles dans mon texte et de les remplacer à la valeur qui est fonction de son code.
Lecture DONC, je suis venu à XRegExp bibliothèque avec unicode plugin, mais n'ont pas trouvé la façon de le faire fonctionner.
var str = '😁wew😁';//\u1F601 symbol
var reg = XRegExp('[\u1F601-\u1F64F]', 'g'); // /[ὠ1-ὤF]/g -doesn't make a lot of sense
//var reg = XRegExp('[\uD83D\uDE01-\uD83D\uDE4F]', 'g'); //Range out of order in character class
//var reg = XRegExp('\\p{L}', 'g'); //doesn't match my symbols
console.log(XRegExp.replace(str, reg, function(match){
return encodeURIComponent(match);//here I want to have smth like that %F0%9F%98%84 to be able to map anything I want to this value and replace to it
}));
Je ne veux vraiment pas de bruteforcer la chaîne à la recherche de la séquence de caractères à partir de ma gamme. Quelqu'un pourrait-il m'aider à trouver le moyen de le faire avec des regexp.
ÉDITÉ
Juste venu avec une idée de l'énumération de tous les emoji symboles. Mieux que brutforce mais toujours à la recherche de la meilleure idée
var reg = XRegExp('\uD83D\uDE01|\uD83D\uDE4F|...','g');
'[\u1F601-\u1F64F]'
est la bonne façon de répondre à ces points (bien que le bloc est U+1F300-U+1F5FF).Non seulement octets, j'ai essayé plusieurs méthodes, mais peut-être que j'ai tort. Quelle serait la regexp avec ceux codepoints? XRegExp('[\u1F300-\u1F5FF]', 'g');?
Javascript ne prend pas en charge les caractères au-delà de U+FFFF nativement.
\u1F601
dans un Javascript chaîne de code de deux caractères, U+1F60 suivie par ASCII de '1'. Il n'y a pas moyen d'utiliser U+1F601
dans une classe de caractères.Regex
/[\uD800-\uDBFF][\uDC00-\uDFFF]/g
résolu mon problème. Il comprend non seulement les émoticônes, mais aussi des caractères spéciaux. Visées stackoverflow.com/questions/3744721/...OriginalL'auteur Fedor Skrynnikov | 2014-02-25
Vous devez vous connecter pour publier un commentaire.
La
\u....
notation de quatre chiffres hexadécimaux, pas moins, pas plus, donc il ne peut que représenter les points de code jusqu'à U+FFFF. Les caractères Unicode ci-dessus qui sont représentés comme des paires de substitution des points de code.De sorte que certains d'approche indirecte est nécessaire. Cf. pour Les chaînes de caractères JavaScript à l'extérieur de la BMP.
Par exemple, vous pouvez rechercher des points de code dans la gamme
[\uD800-\uDBFF]
(haute mères porteuses), et quand vous en trouvez un, vérifiez que le prochain point de code de la chaîne est dans la gamme[\uDC00-\uDFFF]
(si non, il y a une grave erreur de données), d'interpréter les deux comme un caractère Unicode, et de les remplacer par ce que vous souhaitez y mettre. Cela ressemble à un travail pour une simple boucle de la chaîne, plutôt que d'une expression régulière.OriginalL'auteur Jukka K. Korpela
peut-être vous pouvez prendre un coup d'oeil de cet article: http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript
l'emoji unicode à partir de
\u1F601
à\u1F64F
traduire de javascript est de l'utf-16 est
\ud83d\ude00
à\ud83d\ude4f
le premier caractère est toujours
\ud83d
.de sorte que le reg est:
j'espère que cela peut apporter un peu d'aide
OriginalL'auteur shuizhongyuemin
C'est un peu vieux, mais j'ai été à la recherche dans ce problème
et il semble Bradley Momberger a affiché une belle solution ici: http://airhadoken.github.io/2015/04/22/javascript-string-handling-emoji.htmlLa regex qu'il propose est:
Cette expression correspond à la tête de la mère porteuse, qui est utilisé par les émoticônes, et la charracter à la suite de la tête de substitution (qui est supposé être la queue de substitution). Ainsi, tous les émoticônes doivent être appariés correctement et avec
vous devriez être en mesure de supprimer tous les émoticônes.Edit: Mieux regex trouvé. Le ci-dessus regex manque quelques émoticônes.Mais il y a un post reddit avec une version, pour lequel je ne trouve pas de emoji, c'est l'exception à la règle.
Le reddit est ici:
https://www.reddit.com/r/tasker/comments/4vhf2f/how_to_regex_emojis_in_tasker_for_search_match_or/
Et la regex est:
Pour correspondre à toutes les occurrences, utiliser le modificateur g:
Deuxième Édition: Comme CodeToad souligné correctement, ✨ n'est pas reconnu par la ci-dessus Regex, parce que c'est dans les dingbats bloc (grâce à air_hadoken).
La lodash bibliothèque est venu avec une excellente Emoji Regex bloc:
Kevin Scott joliment mis ensemble, ce que cette expression couvre dans son Post De Blog. Spoiler: il comprend dingbats
est de les dingbats bloc, qui peuvent être représentés en UTF-16 sans une paire de substitution. Si vous voulais l'attraper ceux aussi bien, vous auriez besoin de vérifier pour
/[\u2700-\u27BF][\uFE0E-\uFE0F]?/
(le dernier de la gamme est une variante possible sélecteur)Édité à new Regex de lodash, qui comprend également les dingbats bloc.
OriginalL'auteur Andreas Zwettler
ne comprenant pas tous les émoticônes comme : , voir http://getemoji.com/ et tentez votre regex https://regex101.com/
ne comprenant pas tous les émoticônes comme : ⛑ ☕️ ☁️☄️ ☀️☃️ ⛄️ ❄️ ☹️☺️⛩⛱™️ ©️ ®️ 〰️ ➰ ➿
https://github.com/nizaroni/emoji-strip/blob/master/dist/emoji-strip.js#L79
OriginalL'auteur Adrien Parrochia
Ci-dessous regex modèle a fonctionné pour moi en java.
Que java Chaîne en UTF-16 et que les emoji sont au-dessus de 0xFFFF ainsi, cette regex motif de considérer les paires de substitution pour identifier les émoticônes.
OriginalL'auteur Ratnesh Thakur
Pour supprimer tous les possibles émoticônes:
Cette expression est utile pour supprimer tous les Caractères exotiques comme les émoticônes, y compris ceux des langues étrangères. Je suis française développeur, je n'aurais UTF-8 caracteres pour le web txt. Quels personnages pourraient cette regex supprimer dans l'excès?
OriginalL'auteur Adrien Parrochia
Peut-être vous devriez utiliser les remplacer dans une telle façon?
Essayer https://github.com/iLeonidze/emoji.js
OriginalL'auteur Terentiev
des emoji dans la gamme de U+1F600 à U+1F64F
vous pouvez utiliser cette ligne dans le script pour l'envoi de Json:
OriginalL'auteur Faez Mehrabani