假设我有这个字符串; https://cdn.discordapp.com/attachments/000000000000000000/000000000000000000/imagename.png
我目前有[^.]+$
,但这只匹配 png ,我也想匹配image
。
我将如何去做呢?可能有一个Regex语句匹配image
和 png
吗?
答案 0 :(得分:1)
尝试将此正则表达式转换为数学全名(example)
[^\/]+$
或与此匹配的名称不带扩展名(example)
[^\/]+(?=\.png$)
解释
[^\/]+
匹配除斜杠以外的任何字符(在JS中,我们可以将其减少为[^/]
)(?=\.png$)
为正向超前,需要在匹配的字母后加上“ .png”扩展名(以及字符串$的结尾)。
let s="https://cdn.discordapp.com/attachments/000000000000000000/000000000000000000/imagename.png";
console.log( s.match(/[^/]+$/)[0] )
console.log( s.match(/[^/]+(?=\.png$)/)[0] )
答案 1 :(得分:1)
如果您只想在字符串中匹配imagename
[^/]+(?=\.[^/.]*$)
请参见regex demo
如果扩展名可以可选使用
[^/]+(?=(?:\.[^/.]*)?$)
请注意,根据声明正则表达式的方式,您可能需要在模式内转义/
个字符。
详细信息
[^/]+
-除/
以外的一个或多个字符([^/]
是(否定字符类)(?=(?:\.[^/.]*)?$)
-正向超前,需要以下模式才能立即匹配当前位置的右侧:
\.
-一个点[^/.]*
-除/
和.
以外的零个或多个字符$
-字符串的结尾。 (?:\.[^/.]*)?
是一个可选的非捕获组,内部的整个模式序列都是可选的。
答案 2 :(得分:1)
如果要匹配image
和png
,则可以使用2 capturing groups和锚点$
来声明字符串的结尾。
([^/]+)\.([^/.]+)$
说明
([^/]+)
捕获组以捕获文件名。匹配1次以上而不是正斜杠([^./]+)
捕获组以捕获扩展。匹配1次以上,而不是点或正斜杠$
声明字符串的结尾