正则表达式捕获特定字符串
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
char
\.
- 一个点
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);
}
});
大家好,我有一个问题。我正在尝试使用正则表达式来获取所有不以
结尾的行_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
char\.
- 一个点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);
}
});