[英]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
結尾,例如:
部分總結了之前的答案; 如果不接受一些關於 ID 和其他 URL 段之間差異的額外規范,則無法直接解決此問題。 答案取決於您想要接受的額外規格:
/^\\/news\\/[a-z0-9]{24}$/i
/^\\/news\\/[a-z0-9]{20,}$/i
create
and list
: /^\\/news\\/(?!create|list)/i
/news/create
永遠不會包含任何數字: /^\\/news\\/(?=.*[az])(?=.*\\d)[az\\d]+$/i
/^\\/news\\/(?=.*\\d)[a-z0-9]{20,}$/i
20, /^\\/news\\/(?=.*\\d)[a-z0-9]{20,}$/i
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.