【问题标题】:get only the image filename from a url with regex仅从带有正则表达式的 url 获取图像文件名
【发布时间】:2016-06-14 09:06:46
【问题描述】:

我听说世界上有两个人:知道如何正则表达式的人和永远不会知道的人。我认为我是第 2 类:-/

我有这个网址:

http://myserver.com/_images/1-102332-2234.jpg?w=800&h=400&c=1 

我需要一个只提取文件名 1-102332-2234.jpg 的正则表达式

文件结尾可以是所有带有 .并且参数“?w=...”不是必需的。

我们正在努力让它工作 2 天...任何帮助将不胜感激!

【问题讨论】:

  • "http://myserver.com/_images/1-102332-2234.jpg?w=800&h=400&c=1".match(/\/([^?\/]+)(?=\?|$)/)[1]
  • @WiktorStribiżew 为什么不回答?
  • @gurvinder372:我相信这个问题是许多其他问题的欺骗。如果我找到一个好的来源,我会标记这个。我不喜欢在这里回答明显的欺骗。One 在这里,也许,this one 是一个很好的来源候选人。

标签: javascript regex


【解决方案1】:

试试这个正则表达式

/[\w-]+\.jpg/g

并支持更多的文件扩展名

/[\w-]+\.(jpg|png|txt)/g

var output = "http://myserver.com/_images/1-102332-2234.jpg?w=800&h=400&c=1".match(/[\w-]+\.jpg/g);

console.log(output);

//covering other file extensions
var output = "http://myserver.com/_images/1-102332-2234.jpg?w=800&h=400&c=1".match(/[\w-]+\.(jpg|png|txt)/g);

console.log(output);

【讨论】:

  • 正则表达式中的 . 匹配除换行符以外的任何字符,您的意思是转义它。 g+ 匹配 1 个或多个 g 字母,为什么?
  • @WiktorStribiżew 谢谢,你像往常一样是对的 :)。我已采纳您的建议。
【解决方案2】:

我接受@gurvinder372的回答并尝试解释它以便更好地理解

/[\w-]+.(jpg|png|txt)/g

解释正则表达式的作用:

/:分隔符,表示正则表达式的开始和结束

[\w-] :方括号 [] 包含一组字符的临时定义。在这种情况下,该集合首先应该包括预定义字符集\w的所有字符,定义为所有字母数字字符和下划线;此外,字符集应包含不属于预定义字符集\w的连字符-

+ :是字符集定义之后的几个可能的量词之一,它说:“指定字符集的元素至少出现一次”(其他量词是@987654330 @ = 0、1 次或更多,? = 0 或 1 次,{n,m}= 至少 n 次,最多 m 次。

.:点表示任意(“任意”)字符。这里真正的意思是\.,字符.。 “any”说明符在这里是偶然起作用的,因为点是一个字符!

(jpg|png|txt): alternation: 在. 任意字符之后,应该出现由竖线分隔的任一字符序列。

/g :在分隔符/ 完成正则表达式之后,可以有多个修饰符。此处的修饰符g 指示match() 之类的函数查找与正则表达式匹配的尽可能多的字符串子序列。如果它被省略,正则表达式引擎将在找到模式的第一个匹配项后停止搜索。实际上,在这种情况下这已经足够了,因为 URL 应该只包含一个文件名,所以它可以在找到匹配项后停止。

【讨论】:

  • '查找字符 "/" ist' 错误。前导 / 只是正则表达式的分隔符。 “concat”一词具有误导性,括号内的条表示替代方案。此外,g 修饰符不是必需的,因为 URL 可能只包含一个图像文件名。
  • 你能更新我的答案吗?有正确的解释
  • 完成了,我已经更新了文本(它现在被标记为“在同行评审中”,所以你可能还看不到它?)。
  • 看到了,显然这需要时间,我已经批准了您的编辑 :) 谢谢
猜你喜欢
  • 1970-01-01
  • 2019-04-06
  • 2011-05-31
  • 2011-04-09
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
  • 2020-03-11
相关资源
最近更新 更多