有一些像下面這樣的 URL 情況。
(1) https://m.aaa.kr/category/outer/55/
(2) https://m.aaa.kr/category/inner/5/
(3) https://m.aaa.kr/product/jacket/3031/category/55/display/1/
(4) https://m.aaa.kr/product/shirts/30/category/5/display/1/
我需要正確的正則運算式來捕獲這些 URL 的“55”或“5”部分。
我試過的是 /(?:\/category\/\w )(\/category\/)|(\d [^\/])/g
但是,此正則運算式在情況 (3) 中也會捕獲“3031”,在情況 (4) 中捕獲“30”。并且它不能在情況(2)和(4)中捕捉到“5”。
我該如何解決它才能正確行事?
uj5u.com熱心網友回復:
請注意,您的/(?:\/category\/\w )(\/category\/)|(\d [^\/])/g正則運算式匹配多次出現(由于g標志)匹配的模式/category/,然后匹配一個或多個單詞字符,然后/category/(捕獲到第 1 組)或捕獲到第 2 組一個或多個數字,然后是除 a 之外的一個字符/. 這絕對是錯誤的模式,因為您只想匹配和捕獲第 2 組中的數字。此外,第一個選項似乎根本不匹配任何對您有意義的內容,因為它不限制第二個選項。
此外,\w 用于匹配兩個斜杠之間的任何文本通常效率不高,因為 URL 部分通常包含-字符,而不是單詞字符。
所以,你可以使用的是其中之一
/\/category\/(?:[\w-] \/)?(\d )/
/\/category\/(?:[^\/] \/)?(\d )/
請注意,沒有g標志,因為您只需要第一場比賽。詳情:
\/category\/- 一個/category/字串(?:[\w-] \/)?- 一個或多個單詞或連字符的可選序列,然后是 a/(注意[^\/]匹配除 之外的任何一個或多個字符/,以及有助于保持匹配物件結構更簡單的非捕獲組)(\d )- 第 1 組:一位或多位數字。
請參閱 JavaScript 演示:
const urls = ['https://m.aaa.kr/category/outer/55/','https://m.aaa.kr/category/inner/5/','https://m.aaa.kr/product/jacket/3031/category/55/display/1/','https://m.aaa.kr/product/shirts/30/category/5/display/1/']
const rx = /\/category\/(?:[\w-] \/)?(\d )/;
for (const url of urls) {
document.body.innerHTML = '"' url '" => "<b>' (rx.exec(url) || ['',''])[1] '</b>"<br/>';
}
uj5u.com熱心網友回復:
如何直接在/category/or之后捕捉第一個數字(或多個數字)/category/someothertext/
和: /\/category\/(\w \/)?(\d )/g
你可以在這里在線測驗:https : //regex101.com/r/n4dj1r/1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377522.html
標籤:javascript 正则表达式
