簡體   English   中英

如何刪除(Javascript)字符串中除表情符號外的所有表情符號?

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

我正在嘗試多個正則表達式,但無法使它們正常工作。

我有一個簡單的輸入,用戶可以鍵入他們喜歡的任何內容,只是最終結果必須包含表情符號。 為此,我必須從不是emoji表情的字符串中刪除每個字符,然后檢查長度是否大於等於1。

所以基本上這樣: asf..?23kj😔gasdf..😅,fwe34應該變成😔😅 然后,我將檢查長度以確認其> ​​= 1,並且我會很好。

我使用Mac OS自己的虛擬表情符號鍵盤,可以在輸入內容中沿文字寫表情符號,以防您發現有用的知識。

根據我從評論中得到的信息,其中某些內容可能有幫助也可能沒有幫助-



要驗證包含1個或更多表情符號的字符串:

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

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


要僅刪除表情符號,其余部分(全局):

查找: (?:\?[\?-\?])*((?:(?!\?[\?-\?])[\\S\\s])+)(?:\?[\?-\?])*
更換: $1

 (?: \ud83d [\ude00-\ude4f] )*
 (                                       # (1 start)
      (?:
           (?! \ud83d [\ude00-\ude4f] )
           [\S\s] 
      )+
 )                                       # (1 end)
 (?: \ud83d [\ude00-\ude4f] )*


刪除表情符號(全局)以外的所有內容:

查找: ((?:\?[\?-\?])*)(?:(?!\?[\?-\?])[\\S\\s])+((?:\?[\?-\?])*)
替換: $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]
)

您在哪里看到:

(?: \? [\?-\?] )*

在占位符以上的substitue一個HERE

HERE *

您在哪里看到:

(?! \? [\?-\?] )

在占位符以上的substitue一個HERE

(?! HERE


注意:您也可以添加一個高替代范圍,但是所有高替代必須共享相同的低替代范圍。

表情符號位於1F601-1F64F的補充平面中。 普通的JS正則表達式不適用於此類代碼點。 如果有可用的ES6實現支持新的u標志(Babel這樣做),則應該為您完成工作。

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

否則,您需要考慮使用諸如https://github.com/mathiasbynens/regenerate之類的庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM