在javascript中使用regexp替换表情unicode符号

在javascript中使用regexp替换表情unicode符号,javascript,regex,unicode,emoji,Javascript,Regex,Unicode,Emoji,正如大家所知,符号的编码最多为3或4个字节,因此它可能在我的字符串中占据2个符号。例如,“表示法”\u…有四个十六进制数字,不少于也不多于,因此它只能表示u+FFFF以下的代码点。上面以代理代码点对表示的Unicode字符 因此需要一些间接的方法。参见至 例如,您可以查找范围[\uD800-\uDBFF](高级代理)中的代码点,当您找到一个代码点时,请检查字符串中的下一个代码点是否在范围[\uDC00-\uDFFF]中(如果不是,则存在严重的数据错误),将这两个代码点解释为Unicode字符,用

正如大家所知,符号的编码最多为3或4个字节,因此它可能在我的字符串中占据2个符号。例如,“表示法”
\u…
有四个十六进制数字,不少于也不多于,因此它只能表示u+FFFF以下的代码点。上面以代理代码点对表示的Unicode字符

因此需要一些间接的方法。参见至


例如,您可以查找范围
[\uD800-\uDBFF]
(高级代理)中的代码点,当您找到一个代码点时,请检查字符串中的下一个代码点是否在范围
[\uDC00-\uDFFF]
中(如果不是,则存在严重的数据错误),将这两个代码点解释为Unicode字符,用你想放在那里的任何东西来代替它们。这看起来像是通过字符串进行简单循环的作业,而不是正则表达式。

表情符号的范围为U+1F600到U+1F64F

您可以在脚本中使用此行发送Json:

text.replace(/[\u1F60-\u1F64]|[\u2702-\u27B0]|[\u1F68-\u1F6C]|[\u1F30-\u1F70]{\u2600-\u26ff]/g, "");

也许你应该用这种方式来替换

reg = str.replace(new RegExp('maybe you can take a look of this article: http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript

the emoji unicode from
\u1F601
to
\u1F64F

translate to javascript's utf-16 is
\ud83d\ude00
to
\ud83d\ude4f

the first char is always
\ud83d
.

so the reg is out:

/\ud83d[\ude00-\ude4f]/g

reg=str.replace(新的RegExp(“也许你可以看看这篇文章:

表情符号unicode从
\u1F601
\u1F64F

翻译成javascript的utf-16是
\ud83d\ude00
\ud83d\ude4f

第一个字符总是
\ud83d

因此,reg已退出:

"[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]"

希望这能对我在java中使用的正则表达式模式有所帮助

/[\uD800-\uDFFF]./ // This matches emoji

java字符串使用UTF16编码,由于表情符号也在0xFFF以上,所以ReGEX模式考虑代理对来识别表情符号。

< P>这是有点老了,但我正在研究这个问题,Bradley Momberger似乎已经在这里发布了一个很好的解决方案:

他建议的正则表达式是:

.replace(/[\uD800-\uDFFF]./g,'')
此正则表达式匹配头代理(由emojis使用)和头代理(假定为尾代理)后面的字符。因此,所有emojis都应正确匹配,并与

/[\uD83C-\uDBFF\uDC00-\uDFFF]+/
您应该能够删除所有表情符号

编辑:找到更好的正则表达式。上面的正则表达式遗漏了一些表情符号

但是有一个reddit帖子有一个版本,我找不到一个表情符号,这是从规则中排除的。 reddit在这里: 正则表达式是:

/[\uD83C-\uDBFF\uDC00-\uDFFF]+/g
要匹配所有发生的事件,请使用g修改器:

(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*

第二次编辑:正如CodeToad正确指出的,✨ 上面的正则表达式无法识别,因为它位于丁巴特区(多亏了air_hadoken)

lodash库提供了一个优秀的表情正则表达式块:

new RegExp('[\u1000-\uFFFF]+', 'g');

凯文·斯科特(Kevin Scott)很好地组合了这个正则表达式在他的剧透中所涵盖的内容。剧透:它包括丁蝙蝠以移除所有可能的表情符号:

  • /\ud83d[\ude00-\ude4f]/g

  • 不包括所有表情符号,如:为了好玩:不使用regexp删除特殊字符的解决方案


    const str=“abcdefgehijkzзз,ззззззззззззззззззззззззззз107。不仅是字节,我尝试了很多方法,但可能我做得不对。那些代码点的regexp是什么?XRegExp(“[\u1F300-\u1F5FF]”,g')@一二三 Javascript本机不支持U+FFFF以外的字符。
    \u1F601
    在Javascript字符串中编码两个字符,U+1F60后跟ASCII“1”。无法在字符类中使用
    U+1F601
    。Regex
    /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
    解决了我的问题。它不仅包括表情符号,还包括特殊字符。参考Thx。但这几乎就是我在编辑的问题版本中得出的结论。我真的想避免循环,因为每次更改字符串时我都在使用字符串。但你让我想到使用XRegExp('[\uD800-\uDBFF][\uDC00-\uDFFF]',g'))我想这对我来说已经足够了。正确的解决方案应该处理表情符号的字符范围,而不仅仅是一个。这是迄今为止我测试过的最好的一个。尽管它忽略了这个表情符号:✨@编码蟾蜍✨ (“sparkles”)来自dingbats块,它可以在UTF-16中表示,而不需要代理项对。如果您也想捕捉这些,您需要检查
    /[\u2700-\u27BF][\uFE0E-\uFE0F]?/
    (后一个范围是用于可能的变体选择器)从lodash编辑为新的正则表达式,其中还包括dingbats块。你能说为什么-1吗?这个正则表达式可以用来删除所有外来字符作为表情符号,包括外语的表情符号。我是法语开发人员,我只会为web txt添加UTF-8字符。这个正则表达式可以删除哪些多余的字符?