2

我有一个如下所示的 URL...

/images/home/img/digits.png

我需要使用正则表达式或类似的方法从 URL 中获取“数字”。我正在使用正则表达式,因为相同的代码将被复制,并且文件名的长度总是不同的。

我试过使用正则表达式,我在第一个/之后和.png之前得到了所有东西,但是我需要最后一个/之后和.png之前的所有东西。

这是我一直在尝试的:

(?<=/)(.*)(?=.png)
4

2 回答 2

6
"/images/home/img/digits.png".match(/\/([^\/]*)\.png/i)

返回

["/digits.png", "digits"]
于 2012-09-11T11:23:38.957 回答
4

你真的很亲近。(?<=/)([^/]*)(?=\.png$)应该管用。

我添加的三件事执行以下操作:

  1. [^/]*匹配任何不包含 的字符'/',因此匹配不能包含任何斜杠。
  2. 停止匹配任何字符\之前的。.png.
  3. 将其$锚定到字符串的末尾。

此外,如果您只想匹配数字部分而不关心其余部分,则不需要括号,[^/]*因为您使用的前瞻和后瞻量词不包含在匹配中。所以在上面的模式中,唯一会返回的是匹配的内容[^/]*。这可以在隐式组 0 中找到,或者Match.Value如果您使用的是 .NET,则可以在其中找到。

总结所有这些,我会使用的是(?<=/)[^/]*(?=\.png$). 如果您还想匹配,添加不区分大小写的标志也是值得的"/images/home/img/digits.PNG"

于 2012-09-11T11:22:05.510 回答