[英]How can I get a specific part of a URL using RegEx?
我正在嘗試使用RegEx(或其他方法)來下載文件。 我將要解析的鏈接粘貼到下面,並以粗體顯示了要選擇的部分。
https://minecraft.azureedge.net/bin-linux/bedrock-server-1.7.0.13.zip
我環顧四周,考慮過嘗試命名捕獲組 ,但是我不知道。 我希望能夠在JavaScript / Node.js中做到這一點,即使它需要一個模塊 👻。
您可以使用以下正則表達式:
[\d.]+(?=\.\w+$)
這匹配文件擴展名后的點和數字。 您還可以使其更准確:
\d+(?:\.\d+)*(?=\.\w+$)
也許您需要這樣的正則表達式?
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
緊跟在我們匹配的字符串之后 有關+
和*
等特殊字符的更多信息, 請參見本文檔 。 希望有幫助!
我會堅持這樣:
-(\d+(?:\.\d+)*)(?:\.\w+)$
\\d+
將從1到任意數字匹配 ?:
將組成一個小組但不捕獲 \\.\\d+
將匹配一個點,后跟任意數量的數字 *
,最后一個表達式將從零重復到任意時間*
(?:\\.\\w+)$
將組成一個與字符串末尾的擴展名匹配但不捕獲它的組 所以,基本上,這種格式將允許您捕捉所有的破折號后和擴展前的數字,無論是1
, 1.7
, 1.7.0
, 1.7.0.13
, 1.7.0.13.5
等在比賽陣列,在索引[0]處,您將擁有整個正則表達式匹配項;在[1]處,您將具有捕獲組,即您要查找的數字。
您可以使用node.js默認模塊來簡化匹配
URL
和標識文件名的path
,最后是一個簡單的正則表達式。
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.]*$/)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.