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

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

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

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

基本上这样:asf..?23kjgasdf..,fwe34 应该变成这样:。然后我会检查长度以确认它大于等于 1,然后我就可以开始了。

我正在使用 Mac OS 自己的虚拟表情符号键盘来沿着输入中的文本书写表情符号,以防你觉得了解它很有用。

表情符号在补充平面中,位于 1F601 - 1F64F。普通的 JS 正则表达式不能(很好地)处理这样的代码点。如果你有一个支持新的 u 标志的 ES6 实现(Babel 有),那应该可以为你完成这项工作。

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

否则需要考虑使用https://github.com/mathiasbynens/regenerate.

等库

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



验证字符串是否包含 1 个或多个表情符号:

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

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


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

查找:(?:\ud83d[\ude00-\ude4f])*((?:(?!\ud83d[\ude00-\ude4f])[\S\s])+)(?:\ud83d[\ude00-\ude4f])*
替换:</code> </p> <pre><code> (?: \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])*)
替换:</code> </p> <pre><code> ( # (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)


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