繁体   English   中英

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

[英]How to remove all but emojis in a (Javascript) string?

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

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

所以基本上这样: asf..?23kj😔gasdf..😅,fwe34应该变成😔😅 然后,我将检查长度以确认其> ​​= 1,并且我会很好。

我使用Mac OS自己的虚拟表情符号键盘,可以在输入内容中沿文字写表情符号,以防您发现有用的知识。

根据我从评论中得到的信息,其中某些内容可能有帮助也可能没有帮助-



要验证包含1个或更多表情符号的字符串:

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

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


要仅删除表情符号,其余部分(全局):

查找: (?:\?[\?-\?])*((?:(?!\?[\?-\?])[\\S\\s])+)(?:\?[\?-\?])*
更换: $1

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


删除表情符号(全局)以外的所有内容:

查找: ((?:\?[\?-\?])*)(?:(?!\?[\?-\?])[\\S\\s])+((?:\?[\?-\?])*)
替换: $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]
)

您在哪里看到:

(?: \? [\?-\?] )*

在占位符以上的substitue一个HERE

HERE *

您在哪里看到:

(?! \? [\?-\?] )

在占位符以上的substitue一个HERE

(?! HERE


注意:您也可以添加一个高替代范围,但是所有高替代必须共享相同的低替代范围。

表情符号位于1F601-1F64F的补充平面中。 普通的JS正则表达式不适用于此类代码点。 如果有可用的ES6实现支持新的u标志(Babel这样做),则应该为您完成工作。

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

否则,您需要考虑使用诸如https://github.com/mathiasbynens/regenerate之类的库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM