我正在尝试使用RegEx(或其他方法)来下载文件。我将要解析的链接粘贴到了下面,并以粗体显示了要选择的部分。
https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip
我环顾四周,考虑尝试使用Named Capture Groups,但是我不知道该怎么办。我希望能够在JavaScript / Node.js中做到这一点,即使它需要 module 。
答案 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
的工作方式基本上是说我们希望匹配一个子字符串:
\d+
[.\d+]
(?=\.\w+$)
需要一个文件扩展名,例如.zip
,以便在我们匹配的字符串之后紧随其后有关特殊字符(如+
和*
,see this documentation)的更多信息。希望有帮助!
答案 2 :(得分:1)
我会坚持下去:
-(\d+(?:\.\d+)*)(?:\.\w+)$
\d+
将从1到任意数量的数字匹配?:
将组成一个小组,但不会捕获它\.\d+
将匹配一个点,后跟任意数量的数字*
(?:\.\w+)$
将组成一个与扩展名匹配的组,但扩展名将不包含在字符串的末尾因此,基本上,这种格式将允许您捕获破折号之后和扩展名之前的所有数字,例如1
,1.7
,1.7.0
,{{1 }},1.7.0.13
等。在match数组上,索引为[0]的将是整个正则表达式的匹配项,而在[1]则为已捕获的组,即要查找的数字。>
答案 3 :(得分:1)
您可以使用node.js默认模块来简化匹配
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.]*$/)