正则表达式语句以匹配URL的各个部分

时间:2019-02-12 19:21:06

标签: regex

假设我有这个字符串; https://cdn.discordapp.com/attachments/000000000000000000/000000000000000000/imagename.png

我目前有[^.]+$,但这只匹配 png ,我也想匹配image。 我将如何去做呢?可能有一个Regex语句匹配image png吗?

3 个答案:

答案 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

如果扩展名可以可选使用

[^/]+(?=(?:\.[^/.]*)?$)

请参见this regex demo

请注意,根据声明正则表达式的方式,您可能需要在模式内转义/个字符。

详细信息

  • [^/]+-除/以外的一个或多个字符([^/]是(否定字符类
  • (?=(?:\.[^/.]*)?$)-正向超前,需要以下模式才能立即匹配当前位置的右侧:
    • \.-一个点
    • [^/.]*-除/.以外的零个或多个字符
    • $-字符串的结尾。

(?:\.[^/.]*)?是一个可选的非捕获组,内部的整个模式序列都是可选的。

答案 2 :(得分:1)

如果要匹配imagepng,则可以使用2 capturing groups和锚点$来声明字符串的结尾。

([^/]+)\.([^/.]+)$

请参见regex101 demo

说明

  • ([^/]+)捕获组以捕获文件名。匹配1次以上而不是正斜杠
  • .`匹配文字点
  • ([^./]+)捕获组以捕获扩展。匹配1次以上,而不是点或正斜杠
  • $声明字符串的结尾