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

问题描述 投票:0回答:2

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

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

所以基本上是这样的:

asf..?23kj😔gasdf..😅,fwe34
应该变成这样:
😔😅
。然后我会检查长度以确认它 >=1,然后我就可以开始了。

javascript regex emoji
2个回答
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


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


0
投票

表情符号位于补充平面中,位于 1F601 - 1F64F。普通的 JS 正则表达式不能(很好)处理这样的代码点。如果您有一个支持新的

u
标志的 ES6 实现(Babel 可以),那么它应该可以为您完成这项工作。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.