ersetzen der unicode-emoji-symbol mit regexp in javascript
Wie Sie alle wissen, emoji Symbole codiert sind, bis zu 3 oder 4 bytes, so kann es belegen 2 Symbole in meinen string. Zum Beispiel '?wew?'.Länge = 7
Ich möchte feststellen, dass diese Symbole in meinen text, und ersetzen Sie Sie, um den Wert, der abhängig ist von seinem code.
Lesen ALSO, ich kam bis zu XRegExp Bibliothek mit unicode-plugin, aber noch nicht den Weg gefunden, wie es funktioniert.
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
}));
Ich möchte wirklich nicht, um bruteforce-string suchen für die Folge von Zeichen aus meiner Reichweite. Könnte mir jemand helfen einen Weg zu finden, um dies mit regexp ' s.
BEARBEITET
Kam gerade eine Idee, von der Aufzählung all die emoji-Symbole. Besser als brutforce aber noch auf der Suche nach der besseren Idee
var reg = XRegExp('\uD83D\uDE01|\uD83D\uDE4F|...','g');
- Warum sind Sie, der versucht, die bytes, sondern die codepoints? Beispiel Sie haben mit
'[\u1F601-\u1F64F]'
ist der richtige Weg, um eine Verbindung dieser Punkte (obwohl der block U+1F300-U+1F5FF). - Nicht nur bytes, ich habe versucht, viele Möglichkeiten, aber vielleicht habe ich es falsch verstanden. Was wäre die regexp mit denen zeichenelemente? XRegExp('[\u1F300-\u1F5FF]', 'g');?
- Javascript unterstützt keine Zeichen über U+FFFF nativ.
\u1F601
in einem Javascript-string kodiert zwei Zeichen, U+1F60, gefolgt von ASCII '1'. Es gibt keinen Weg, umU+1F601
in einer Charakter-Klasse. - Regex
/[\uD800-\uDBFF][\uDC00-\uDFFF]/g
mein problem gelöst. Es beinhaltet nicht nur emojis, sondern auch Sonderzeichen. Genannten stackoverflow.com/questions/3744721/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
\u....
notation hat vier hex-Ziffern, nicht weniger, nicht mehr, so kann es nur darstellen code Punkte bis U+FFFF. Unicode-Zeichen, oben, dargestellt als Paare von surrogate-code-points.So einige indirekte Ansatz ist notwendig. Vgl. zu JavaScript-strings, die außerhalb der BMP.
Beispielsweise kann man sich für die code-Punkte im Bereich
[\uD800-\uDBFF]
(high-surrogates), und wenn Sie einen finden, überprüfen Sie die nächste code-Punkt in der Zeichenfolge ist im Bereich[\uDC00-\uDFFF]
(wenn nicht, liegt ein schwerwiegender Datenfehler), interpretieren die beiden als ein Unicode-Zeichen, und ersetzen Sie Sie durch, was Sie wollen, dort zu setzen. Dies sieht wie ein job für eine einfache Schleife durch den string, sondern als ein regulärer Ausdruck.vielleicht können Sie einen Blick dieser Artikel: http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript
den unicode-emoji von
\u1F601
zu\u1F64F
übersetzen in javascript utf-16 ist
\ud83d\ude00
zu\ud83d\ude4f
der erste char ist immer
\ud83d
.also die reg ist aus:
hoffe dies kann einigen helfen,
Dies ist etwas alt, aber ich war auf der Suche, der mit diesem problem
und es scheint Bradley Momberger hat geschrieben eine schöne Lösung gibt es hier: http://airhadoken.github.io/2015/04/22/javascript-string-handling-emoji.htmlRegex er vorschlägt, ist:
Dieser regex passt der Kopf Surrogat, welches von emojis und die charracter nach dem Kopf Surrogat (wird davon ausgegangen, dass der Schwanz Ersatz). So, alle emojis abgestimmt werden sollte korrekt und mit
Sie sollten in der Lage sein, um entfernen Sie alle emojis.Edit: Bessere regex gefunden. Die obige regex findet einige emojis.Aber es ist ein reddit-post mit einer version, für die ich nicht finden können, ein emoji, das ist ausgenommen von der Regel.
Der reddit ist hier:
https://www.reddit.com/r/tasker/comments/4vhf2f/how_to_regex_emojis_in_tasker_for_search_match_or/
Und die regex ist:
Entsprechen allen vorkommen, verwenden Sie das g-modifier:
Zweiter Edit: Als CodeToad wies darauf hin, richtig, ✨ wird nicht erkannt durch die obige Regex, weil es in der dingbats-block (danke an air_hadoken).
Den lodash Bibliothek kam mit einem hervorragenden Emoji-Regex-block:
Kevin Scott schön zusammen, was diese regex deckt in seinem Blog-Post. Spoiler: es umfasst dingbats ?
/[\u2700-\u27BF][\uFE0E-\uFE0F]?/
(die letzteren Bereich ist für eine mögliche Variante-Selektor)nicht alle emojis wie : ? ? ? ? ? ? ? ?, sehen http://getemoji.com/ und versuchen Sie Ihr regex https://regex101.com/
nicht alle emojis wie : ⛑ ☕️ ☁️☄️ ☀️☃️ ⛄️ ❄️ ☹️☺️⛩⛱™️ ©️ ®️ 〰️ ➰ ➿
https://github.com/nizaroni/emoji-strip/blob/master/dist/emoji-strip.js#L79
Unten regex-Muster hat für mich in java.
Als java-String verwendet UTF-16-Kodierung und wie emoji ' s sind oben 0xFFFF, wird in diesem regex-pattern überlegen Surrogat-Paare zu identifizieren, die emojis.
Entfernen alle möglichen emojis:
Werden können, sollten Sie verwenden, ersetzen Sie in solcher Weise?
Ausprobieren https://github.com/iLeonidze/emoji.js
emoji ' s im Bereich von U+1F600 U+1F64F
können Sie diese Zeile in Ihrem script für das senden mit Json: