簡體   English   中英

NPM 或任何其他包的名稱和任何版本號的正則表達式

[英]A regex for NPM or any other package both for name and any version number

我在 SO 和 google 上搜索了一個很好的驗證正則表達式來檢測完整的NPM/其他包名稱(包名稱(@)版本號 - 所有格式)。
現在,在您將此問題標記為重復之前,我必須說我在這里搜索過,但我發現的所有內容都沒有對我有用:
正則表達式從nuget包文件名解析包名和版本號
用於版本號解析的正則表達式
npm/validate-npm-package-name
語義版本控制正則表達式
包名正則表達式
semver-regex

我自己也嘗試了幾個正則表達式,但沒有一個為任何邊緣情況做這項工作:

const regex = new RegExp(/(\^|\~?)(\d|x|\*)+\.(\d|x|\*)+\.(\d|x|\*)+/g);
const isScriptVersion = regex.test('imagesloaded@4.1');
if (isScriptVersion) {
}

或者

const regex = new RegExp('^(.*?)\.((?:\.?[0-9]+){3,}(?:[-a-z]+)?)');
console.log(regex.test('imagesloaded@4.1'));

也嘗試過使用第 3 方 NPM 包,但運氣不佳:

const packageNameRegex = require('package-name-regex')
console.log(packageNameRegex.test('font-awesome@5.11.2'))

const semverRegex = require('semver-regex');
console.log(semverRegex().test('font-awesome@5.11.2'));

這是我的測試列表:

ansi-escapes@^4.3.1
babel-eslint@^10.1.0
chance@^1.1.7
cli-cursor@^3.1.0
eslint@^7.13.0
faker@^5.1.0
forever-monitor@^3.0.1
fs-extra@^9.0.1
lorem-ipsum@^2.0.3
micromatch@^4.0.2
mongoose@^5.10.13
puppeteer@^5.4.1
puppeteer-extra@^3.1.15
puppeteer-extra-plugin-stealth@^2.6.3
random-email@^1.0.3
random-useragent@^0.5.0
random-words@^1.1.1
slice-ansi@^4.0.0
uuid@^8.3.1
validator@13.1.17
wrap-ansi@^7.0.0
font-awesome@5.11.2
react-dom@16.13.1
bootstrap@4.5.2
moment-duration-format@2.3.2

以上所有工作與

/(\^|\~?)(\d|x|\*)+\.(\d|x|\*)+\.(\d|x|\*)+/g

然而
以下對我不起作用:

imagesloaded@4.1
flickity@2.0
lomster@1
example@1.1.1.1.1
example-package@3.12.45.66.34.2
unicorn@1.2.3-alpha.10.beta.0
rainbow@v1.1.1

非常感謝你們。 干杯。

你可以試試這個正則表達式:

/@[~^]?([\dvx*]+(?:[-.](?:[\dx*]+|alpha|beta))*)/g

正則表達式演示

正則表達式詳情:

  • @ : 匹配一個@
  • [~^]? : 匹配一個可選的~^
  • ( : 開始一個捕獲組 #1
    • [\\dvx*]+ : 匹配 1+ 個數字或vx*字符
    • (?:開始一個非捕獲組
      • [-.] : 匹配一個-.
      • (?:[\\dx*]+|alpha|beta) : 匹配數字或vx*字符或alphabeta 1+
    • )* : 結束非捕獲組。 *表示匹配該組的 0 個或多個
  • ) : 結束捕獲組 #1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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