簡體   English   中英

javascript: regex 必須包含一個字符串,但它也不包含某個字符串

[英]javascript: regex must contain a string, but it also not contain a certain string

我想要一個正則表達式,它必須包含一個字符串而不包含另一個字符串。

例如:網址是:

/news/create

/news/5a40778e82264f0d689fc345

/news/5a40824382264f0d689fc347

/news/list

/files

/files/43er778e82264fref32fcre4

我只想得到:

/news/5a40778e82264f0d689fc345

/news/5a40824382264f0d689fc347

這意味着 url 必須包含/news ,但不應包含/news/create/news/list 只需要像/news/:id這樣的新聞細節。 其他網址如: /files/xxx也不應該返回。

我怎樣才能得到這樣的正則表達式?

預先感謝。

試試這個正則表達式:

/\/news\/(?!create|list).*/

您可以使用以下正則表達式

/^\/news\/[^a-zA-z]/g

 var arr = ['/news/create','/news/5a40778e82264f0d689fc345','/news/5a40824382264f0d689fc347','/news/list','/files','/files/43er778e82264fref32fcre4']; var result = arr.reduce((r, url) => { if(/^\\/news\\/[^a-zA-z]/g.test(url)) r.push(url); return r; },[]); console.log(result);

一種方法可能是使用正向前瞻來檢查/news正則表達式之后是否至少有一個數字和至少一個小寫字符,例如:

^\\/news\\/(?=.*[az])(?=.*\\d)[az\\d]+$

解釋

  • 從字符串的開頭^
  • 匹配/news/
  • 斷言至少一個小寫字符(?=.*[az])正向前瞻
  • 斷言至少一位數字(?=.*\\d)正向前瞻
  • 匹配一個小寫字符或數字一次或多次[az\\d]+
  • 字符串$的結尾

如果要在字符串中找到該模式,可以以單詞邊界\\b結尾,例如:

\\/news\\/(?=.*[az])(?=.*\\d)[az\\d]+\\b

部分總結了之前的答案; 如果不接受一些關於 ID 和其他 URL 段之間差異的額外規范,則無法直接解決此問題。 答案取決於您想要接受的額外規格:

  • ID 的給定長度為 24 個字符: /^\\/news\\/[a-z0-9]{24}$/i
  • ID 有超過 20 個字符: /^\\/news\\/[a-z0-9]{20,}$/i
  • 您有其他 URL 的黑名單,例如create and list : /^\\/news\\/(?!create|list)/i
  • 其他 URL,如/news/create永遠不會包含任何數字: /^\\/news\\/(?=.*[az])(?=.*\\d)[az\\d]+$/i
  • (以上的組合,比如說,ID 包含超過 20 個字符和至少 1 個數字:/ /^\\/news\\/(?=.*\\d)[a-z0-9]{20,}$/i 20, /^\\/news\\/(?=.*\\d)[a-z0-9]{20,}$/i )
  • 等等..

暫無
暫無

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

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