如何在(Javascript)字符串中删除除emojis之外的所有内容?

时间:2015-08-10 11:26:50

标签: javascript regex emoji

我正在尝试多个正则表达式,但我无法让它们起作用。

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

基本上这样:asf..?23kjgasdf..,fwe34应该成为:。然后我会检查长度以确认它是> = 1并且我会很高兴。

我使用Mac OS非常自己的虚拟表情符号键盘在输入中沿着文本编写表情符号,以防你知道它有用。

2 个答案:

答案 0 :(得分:2)

根据我的评论,其中一些可能会有所帮助,也可能没有帮助 -

验证字符串是否包含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] )*

在占位符HERE

中替换以上其中一项

HERE *

你看到的地方:

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

在占位符HERE

中替换以上其中一项

(?!HERE

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

答案 1 :(得分:0)

Emojis位于1F601 - 1F64F的辅助平面上。普通的JS regexp对这些代码点不起作用。如果您有可用的ES6实现支持新的let buttonPath = UIBezierPath(roundedRect: button.bounds, byRoundingCorners: .TopLeft | .BottomLeft, cornerRadii: CGSizeMake(1.0, 1.0)) 标志(Babel确实),那么应该为您完成工作。

u

否则,您需要考虑使用https://github.com/mathiasbynens/regenerate等库。