问题描述
结尾的行
_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$
请参见regex demo
详细信息
-
.*
-尽可能多的零个或多个除换行符以外的字符 -
(?!.*_[0sml]\.jpg$)
-如果在当前位置的右边,有一个负前行,则匹配失败-
.*
-尽可能多的零个或多个除换行符以外的字符 -
_
-下划线 -
[0sml]
-一个0
,s
,m
,l
字符 -
\.
-一个点 -
jpg
-jpg
字符串 -
$
-字符串锚点的结尾
-
-
.+\.jpg$
-除换行符之外的任何一个或多个字符,尽可能多的是.jpg
字符串和字符串结尾。
或者,.*(?<!_[0sml])\.jpg$
,如果您可以负担得起的话:
.*(?<!_[0sml])\.jpg$
请参见this regex demo。详细信息:
-
.*
-尽可能多的零个或多个除换行符以外的字符 -
(?<!_[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);
}
});