如何删除 (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');
等库
根据我从评论中得到的信息,其中一些可能有帮助也可能没有帮助 -
验证字符串是否包含 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
)
注意 - 您也可以添加高代理项范围,但是所有高代理项必须共享相同的低代理项范围。
我正在尝试多个正则表达式,但我无法让它们工作。
我有一个简单的输入,用户可以输入他们喜欢的任何内容,只是最终结果必须包含表情符号。为此,我必须从字符串中删除不是表情符号的每个字符,然后检查长度是否 >= 1.
基本上这样:asf..?23kjgasdf..,fwe34
应该变成这样:。然后我会检查长度以确认它大于等于 1,然后我就可以开始了。
我正在使用 Mac OS 自己的虚拟表情符号键盘来沿着输入中的文本书写表情符号,以防你觉得了解它很有用。
表情符号在补充平面中,位于 1F601 - 1F64F。普通的 JS 正则表达式不能(很好地)处理这样的代码点。如果你有一个支持新的 u
标志的 ES6 实现(Babel 有),那应该可以为你完成这项工作。
tags.replace(/^[\u{1f600}-\u{1f64f}]/g, 'X');
等库
根据我从评论中得到的信息,其中一些可能有帮助也可能没有帮助 -
验证字符串是否包含 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
)
注意 - 您也可以添加高代理项范围,但是所有高代理项必须共享相同的低代理项范围。