如何使用RegEx获取URL的特定部分?

时间:2018-11-07 23:20:57

标签: javascript regex


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

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

我环顾四周,考虑尝试使用Named Capture Groups,但是我不知道该怎么办。我希望能够在JavaScript / Node.js中做到这一点,即使它需要 module

4 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

[\d.]+(?=\.\w+$)

这匹配文件扩展名后的点和数字。您还可以使其更准确:

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

答案 1 :(得分:1)

也许您需要这样的正则表达式?

var url = '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( match )

此模式/\d+[.\d+]*\d+/gi的工作方式基本上是说我们希望匹配一个子字符串:

  1. 首先包含一个或多个数字字符,即\d+
  2. 紧随其后的是数字和十进制字符的可选分组,即[.\d+]
  3. 最后,(?=\.\w+$)需要一个文件扩展名,例如.zip,以便在我们匹配的字符串之后紧随其后

有关特殊字符(如+*see this documentation)的更多信息。希望有帮助!

答案 2 :(得分:1)

我会坚持下去:

-(\d+(?:\.\d+)*)(?:\.\w+)$
  • 它与任何数字前的破折号匹配
  • 括号将组成一个捕获组
  • 然后,\d+将从1到任意数量的数字匹配
  • ?:将组成一个小组,但不会捕获它
  • 在此组中,\.\d+将匹配一个点,后跟任意数量的数字
  • 由于*
  • ,最后一个表达式将从零重复到任意时间。
  • 然后,(?:\.\w+)$将组成一个与扩展名匹配的组,但扩展名将不包含在字符串的末尾

因此,基本上,这种格式将允许您捕获破折号之后和扩展名之前的所有数字,例如11.71.7.0,{{1 }},1.7.0.13等。在match数组上,索引为[0]的将是整个正则表达式的匹配项,而在[1]则为已捕获的组,即要查找的数字。

答案 3 :(得分:1)

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

URLpath来标识文件名,最后是一个简单的正则表达式。

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.]*$/)