簡體   English   中英

正則表達式捕獲特定字符串

[英]RegEx capture specific string

大家好,我有個問題。 我正在嘗試使用正則表達式來獲取所有不以

_0.jpg
_s.jpg
_m.jpg
_l.jpg


示例行:


9Uikt/ifehr54mg__0.jpg
9Uikt/idg4hdmg2_s.jpg
9Uikt/igdffgggfmg4_m.jpg
9Uikt/img3teg3gegg7_l.jpg
9Uikt/imgerhw45h70.jpg
9Uikt/imggq4ge37s.jpg
9Uikt/img3f37m.jpg
9Uikt/img34g3f7l.jpg
9Uikt/imgf3f34t4t73l_.jpg
9Uikt/imgf3f34t4t73l_2.jpg

我試圖得到的大膽的。

在 9Uikit/ 和 .jpg 之間可以出現任何字符,除了文件名不允許的字符

"*:<>?/\\|

我試過這個代碼

.*(_(?![0-9][a-zA-Z])).*\\.jpg

您可以使用

^(?!.*_[0sml]\.jpg$).+\.jpg$

查看正則表達式演示

細節

  • .* - 除換行符以外的任何零個或多個字符,盡可能多
  • (?!.*_[0sml]\\.jpg$) - 如果在當前位置的右側有
    • .* - 除換行符以外的任何零個或多個字符,盡可能多
    • _ - 下划線
    • [0sml] - 0 , s , m , l字符
    • \\. - 一個點
    • jpg - jpg字符串
    • $ - 字符串錨點的結尾
  • .+\\.jpg$ - 除換行符以外的任何一個或多個字符,盡可能多, .jpg字符串和字符串結尾。

或者, .*(?<!_[0sml])\\.jpg$如果你能負擔得起回顧:

.*(?<!_[0sml])\.jpg$

請參閱此正則表達式演示 細節:

  • .* - 除換行符以外的任何零個或多個字符,盡可能多
  • (?<!_[0sml]) - 不允許_0 , s , ml字符緊接在左邊 - \\.jpg$ - .jpg在字符串的末尾。

您的問題陳述可能稍微說明了您可能想要拒絕的其他組合。 從我所看到的,你不想匹配 '7_' 在這種情況下,消極的前瞻是要做的事情

Perl 正則表達式可能看起來像

    if(m/img(?!7_).*jpg/) {print}

請注意,SED 和 AWK 不支持負前瞻,但您沒有說明如何執行正則表達式

您可以簡單地使用這個正則表達式,我認為它更易於閱讀和理解。

\w+\/?.*?_\w\.jpg

 const testCases = [ "9Uikt/img7_0.jpg", "9Uikt/img7_s.jpg", "9Uikt/img7_m.jpg", "9Uikt/img7_l.jpg", "9Uikt/img70.jpg", "9Uikt/img7s.jpg", "9Uikt/img7m.jpg", "9Uikt/img7l.jpg", "9Uikt/img7l_.jpg" ]; const re = /\\w+\\/?.*?_\\w\\.jpg/gi; testCases.forEach(tc => { if (tc.match(re)) { console.log("Matched: " + tc); } else { console.log("Not matched: " + tc); } });

暫無
暫無

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

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