如何删除(Javascript)字符串中除表情以外的所有表情?

如何删除(Javascript)字符串中除表情以外的所有表情?,javascript,regex,emoji,Javascript,Regex,Emoji,我正在尝试多个正则表达式,但无法使它们工作 我有一个简单的输入,用户可以键入他们喜欢的任何内容,只是最终结果必须包含表情符号。为了实现这一点,我必须从字符串中删除所有不是表情符号的字符,然后检查长度是否大于等于1 所以基本上:asf..23kj表情符号在一个补充平面上,在1F601-1F64F。普通的JS正则表达式无法(很好地)处理此类代码点。如果您有一个支持新的u标志(Babel有)的ES6实现,那么它应该可以为您完成这项工作 tags.replace(/^[\u{1f600}-\u{1f64

我正在尝试多个正则表达式,但无法使它们工作

我有一个简单的输入,用户可以键入他们喜欢的任何内容,只是最终结果必须包含表情符号。为了实现这一点,我必须从字符串中删除所有不是表情符号的字符,然后检查长度是否大于等于1


所以基本上:
asf..23kj表情符号在一个补充平面上,在1F601-1F64F。普通的JS正则表达式无法(很好地)处理此类代码点。如果您有一个支持新的
u
标志(Babel有)的ES6实现,那么它应该可以为您完成这项工作

tags.replace(/^[\u{1f600}-\u{1f64f}]/g, 'X');

另外,您需要考虑从库中使用诸如.< /p> ,从我得到的评论中,有些可能会或可能没有帮助-< /P>



要验证包含1个或多个表情符号的字符串,请执行以下操作:

 # ^(?=[\S\s]*(?:\ud83d[\ude00-\ude4f]))

 ^ 
 (?=
      [\S\s]* 
      (?: \ud83d [\ude00-\ude4f] )
 )


要仅删除表情符号,请保留其余表情符号(全局):

查找:
(?:\ud83d[\ude00-\ude4f])*((?:(?!\ud83d[\ude00-\ude4f])[\S\S])+(?:\ud83d[\ude00-\ude4f])*

替换:
$1

 (?: \ud83d [\ude00-\ude4f] )*
 (                                       # (1 start)
      (?:
           (?! \ud83d [\ude00-\ude4f] )
           [\S\s] 
      )+
 )                                       # (1 end)
 (?: \ud83d [\ude00-\ude4f] )*


要删除除表情符号(全局)以外的所有内容,请执行以下操作:

查找:
((?:\ud83d[\ude00-\ude4f])*)(?:(?!\ud83d[\ude00-\ude4f])[\S\S])+((?:\ud83d[\ude00-\ude4f]))

替换:
$1$2

 (                                       # (1 start)
      (?: \ud83d [\ude00-\ude4f] )*
 )                                       # (1 end)
 (?:
      (?! \ud83d [\ude00-\ude4f] )
      [\S\s] 
 )+
 (                                       # (2 start)
      (?: \ud83d [\ude00-\ude4f] )*
 )                                       # (2 end)

编辑:要使用不同的表情符号utf16范围,请执行以下操作

不同的高级代理:

(?:
     High_surrogate_A [Low_surrogate_start_A-Low_surrogate_end_A]
  |  High_surrogate_B [Low_surrogate_start_B-Low_surrogate_end_B]
  |  High_surrogate_C [Low_surrogate_start_C-Low_surrogate_end_C]
)
或者,相同的高代理,不同的低代理范围:

(?:
     High_surrogate [Low_surrogate_start1-Low_surrogate_end1Low_surrogate_start2-Low_surrogate_end2]
)
或者,混合:

(?:
     High_surrogate_A [Low_surrogate_startA1-Low_surrogate_endA1Low_surrogate_startA2-Low_surrogate_endA2]
  |  High_surrogate_B [Low_surrogate_start_B-Low_surrogate_end_B]
)
您可以看到:

(?:\ud83d[\ude00-\ude4f])*

在此处的占位符
中替换上述内容之一

此处
*

您可以看到:

(?!\ud83d[\ude00-\ude4f])

在此处的占位符
中替换上述内容之一

(?!
此处



注意-您也可以添加高代理项范围,但是所有高代理项必须共享相同的低代理项范围。

将您已经尝试过的代码添加到您的问题。
“我正在尝试多个正则表达式”
-但没有发布?表情符号在javascript字符串中是什么样子的?它只显示一个图标,尽管它在内部附加了一个unicode()。我只是使用“replace”函数来删除字符,比如
标记。replace(/^[\u1f600-\u1f64f]/g,'X')
,而不是删除字符,应该将其更改为“X”。那么
。替换(/\ud83d[\ude00-\ude4f]/g',)
以删除所有表情符号,然后计数
s.length-s\u new.length
?这几乎可以,但主要是由于在其他UTF范围中添加了新表情符号,因此,当它们不应该被移除时,它们被移除。这段代码基本上工作正常,但正如我所说的,它删除的内容超出了它应该删除的内容。我如何才能添加更多的范围,使新的表情符号不会被删除?顺便问一下,如果你能告诉我的话,你在哪里找到这些范围的。