我正在尝试多个正则表达式,但无法使它们正常工作。
我有一个简单的输入,用户可以键入他们喜欢的任何内容,只是最终结果必须包含表情符号。为此,我必须从不是emoji表情的字符串中删除每个字符,然后检查长度是否大于等于1。
所以基本上这个:asf..?23kj😔gasdf..😅,fwe34
应该变成这个:😔😅
。然后,我将检查长度以确认其> = 1,并且我会很好。
我使用Mac OS自己的虚拟表情符号键盘,以便在输入中沿文本写表情符号,以防您发现有用的知识。
最佳答案
根据我从评论中得到的信息,其中某些内容可能有帮助也可能没有帮助-
要验证包含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
)注意-您也可以添加高替代范围,但是所有高替代必须共享相同的低替代范围。
关于javascript - 如何删除(Javascript)字符串中除表情符号外的所有表情符号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31918322/