Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用正则表达式获取URL的特定部分?_Javascript_Regex - Fatal编程技术网

Javascript 如何使用正则表达式获取URL的特定部分?

Javascript 如何使用正则表达式获取URL的特定部分?,javascript,regex,Javascript,Regex,我正在尝试使用RegEx(或其他方法)下载文件的一部分。我已经粘贴在我试图解析的链接下面,并将我试图选择的部分以粗体显示 https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip 我环顾四周,想尝试一下,但是我想不出来。我希望能够在JavaScript/Node.js中做到这一


我正在尝试使用RegEx(或其他方法)下载文件的一部分。我已经粘贴在我试图解析的链接下面,并将我试图选择的部分以粗体显示

https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip
https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip

我环顾四周,想尝试一下,但是我想不出来。我希望能够在JavaScript/Node.js中做到这一点,即使它需要一个模块,您也可以使用下面的正则表达式:

[\d.]+(?=\.\w+$)
这将匹配文件扩展名后面的点和数字。您还可以使其更加准确:

\d+(?:\.\d+)*(?=\.\w+$)

也许像这样的正则表达式就是您所需要的

var url='1〕https://minecraft.azureedge.net/bin-linux9.9.9/bedrock-server-1.7.0.13.zip'
var match=url.match(/(\d+[。\d+]*)(?=\。\w+$)/gi)
console.log(匹配)
我坚持以下观点:

-(\d+(?:\.\d+)*)(?:\.\w+)$
  • 它匹配任何数字前的破折号
  • 括号将构成一个捕获组
  • 然后,
    \d+
    将从一位匹配到任意位数
  • ?:
    将创建一个组,但不会捕获它
  • 在此组中,
    \。\d+
    将匹配一个点,后跟任意数字
  • 由于
    *
  • 在此之后,
    (?:\。\w+)$
    将创建一个组,该组与字符串末尾的扩展名匹配,但不会捕获它

因此,基本上,这种格式允许您捕获破折号之后和扩展之前的所有数字,无论是
1
1.7
1.7.0
1.7.0.13
1.7.0.13.5
等等。在匹配数组上,在索引[0]处,您将拥有整个正则表达式匹配,在[1]您将获得捕获的组,即您要查找的号码。

您可以使用node.js默认模块简化匹配

并最终识别文件名和一个简单的regexp。


请尝试
[\d.]+(?=\.\w+$)
@revo由于某些原因,它在JavaScript中不起作用@Nathanielfredricks在下面的另一个答案-这对你有效吗?有效,但我不确定区别是什么。太好了!我将更新我的答案以更详细地解释它。这并不保证它匹配文件扩展名之前的正确字符序列,也不会匹配版本号(可能存在)的单个数字。@revo感谢您的反馈-仅更新答案以考虑您的评论
const { URL } = require('url')
const path = require('path')

const test = new URL(
  'https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip'
)
/*
  test.pathname = '/bin-linux/bedrock-server-1.7.0.13.zip'
  path.parse(test.pathname) = { root: '/',
    dir: '/bin-linux',
    base: 'bedrock-server-1.7.0.13.zip',
    ext: '.zip',
    name: 'bedrock-server-1.7.0.13' }
  match = [ '1.7.0.13', index: 15, input: 'bedrock-server-1.7.0.13' ]
*/
const match = path.parse(test.pathname)
  .name
  .match(/[0-9.]*$/)