[英]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
, m
或l
字符緊接在左邊 - \\.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.