簡體   English   中英

如何通過正則表達式對以下字符串進行分組

[英]How to group the following strings by regular expression

這是我要處理的字符串。(至少有一個帶下划線的部分。最后一部分從未加下划線)

'_A._B._C._D._F.f'`

我期望

["A", "B", "C", "D", "F", "f"]

如何通過規律性地實現同樣的效果,我試過,但不能循環相同的格式部分。

new RegExp('^[(_(.+)\\.)]+(.+)$')

您可以從匹配中排除點和下划線。

 var string = '_A._B._C._D._F.f', result = string.match(/[^._]+/g); console.log(result); 

不使用正則表達式怎么樣?

 str = '_A._B._C._D._F.f'.split('.') var alphabets = str.map(c => c.replace('_', '')); console.log(alphabets); 

您可以使用split刪除[._]+ (包含點或樓層的任何子字符串)和filter (刪除初始空字符串):

'_A._B._C._D._F.f'.split(/[._]+/).filter(function(s){ return s.length > 0})
# => [ "A", "B", "C", "D", "F", "f" ]

編輯:評論中建議的簡化:

'_A._B._C._D._F.f'.split(/[._]+/).filter(Boolean)
# =>  [ "A", "B", "C", "D", "F", "f" ]

在你的正則表達式中,你嘗試使用一個錨來匹配整個模式^來斷言字符串的開頭,然后是一個字符類 ,它只匹配幾個字符中的一個(例如也可以寫成[_(+\\\\.)]+ )然后你捕獲捕獲組中的其余字符串並斷言$行的結尾。

如果要先檢查字符串的格式,可以使用更精確的模式。 當該模式匹配時,您可以對單個字符執行不區分大小寫的匹配,因為該模式已經過驗證:

 const regex = /^_[AZ](?:\\._[AZ])+\\.[az]$/; const str = `_A._B._C._D._F.f`; if (regex.test(str)) { console.log(str.match(/[az]/ig)); } 

請參閱正則表達式演示

這將匹配:

  • ^斷言strin的開始
  • _[AZ]匹配下划線和大寫字符
  • (?:\\._[AZ])+ 1+次重復分組結構以匹配._后跟一個大寫字符
  • \\.[az]匹配點和小寫字符
  • $斷言該行的結尾

字符串方法.match與全局標志,可以幫助您:

 console.log('_A._B._C._D._F.f'.match(/[az]+/gi)) 

暫無
暫無

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

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