簡體   English   中英

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

[英]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工作方式基本上是說我們想要一個匹配的子字符串:

  1. 首先包含一個或多個數字字符,即\\d+
  2. 在此之后,可以有可選的數字和十進制字符分組,即[.\\d+]
  3. 最后, (?=\\.\\w+$)要求文件擴展名如.zip緊跟在我們匹配的字符串之后

有關+*等特殊字符的更多信息, 請參見本文檔 希望有幫助!

我會堅持這樣:

-(\d+(?:\.\d+)*)(?:\.\w+)$
  • 它與任何數字前的破折號匹配
  • 括號將組成一個捕獲組
  • 然后, \\d+將從1到任意數字匹配
  • ?:將組成一個小組但不捕獲
  • 在此組中, \\.\\d+將匹配一個點,后跟任意數量的數字
  • 由於* ,最后一個表達式將從零重復到任意時間*
  • 之后, (?:\\.\\w+)$將組成一個與字符串末尾的擴展名匹配但不捕獲它的組

所以,基本上,這種格式將允許您捕捉所有的破折號后和擴展前的數字,無論是11.71.7.01.7.0.131.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM