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