3 回答

TA貢獻1872條經(jīng)驗 獲得超4個贊
您可以使用錨點來斷言字符串的開頭^
和結(jié)尾$
。
匹配/
并可選擇匹配帶有后跟 3 個數(shù)字的解決方案的部分,或使用交替匹配搜索部分。
^\/(?:solutions\/(?:99043|60009|40117)(?:\/.*)?|search\b.*)?$
^
字符串的開始\/
比賽/
(?:
非捕獲組solutions\/
比賽solutions/
(?:99043|60009|40117)
匹配 3 個數(shù)字中的 1 個(?:\/.*)?
可選匹配/
和除換行符以外的任何字符 0+ 次|
或者search\b.*
匹配搜索后跟一個單詞邊界以不匹配例如searchhere
)?
關(guān)閉非捕獲組并使其可選$
字符串結(jié)束

TA貢獻1848條經(jīng)驗 獲得超6個贊
如果您從 URL 中提取路徑名然后執(zhí)行匹配,我建議您使用^\/$
而不是僅匹配“以斜杠結(jié)尾”。
所以那將是 ^\/$|\/solutions\/(99043|60009|40117)\/.*|\/search.*
您可以在 regex101.com 上對其進行測試。我發(fā)現(xiàn)正則表達式對于可視化正則表達式非常有幫助。

TA貢獻1735條經(jīng)驗 獲得超5個贊
您可以使用以下正則表達式:
^\/((solutions(\/(99043|60009|40117)(\/.*)?)?)|search(.*)?)$
測試:
var regex = /^\/((solutions(\/(99043|60009|40117)?(\/.*)?)?)|search(.*)?)?$/
console.log(1, regex.test('/')) // true
console.log(2, regex.test('/solutions')) // true
console.log(3, regex.test('/solutions/')) // true
console.log(4, regex.test('/solutions/99043')) // true
console.log(5, regex.test('/solutions/99043/')) // true
console.log(6, regex.test('/solutions/99043/anything')) // true
console.log(7, regex.test('/solutions/60009')) // true
console.log(8, regex.test('/solutions/60009/')) // true
console.log(9, regex.test('/solutions/60009/anything')) // true
console.log(10, regex.test('/solutions/40117')) // true
console.log(11, regex.test('/solutions/40117/')) // true
console.log(12, regex.test('/solutions/40117/anything')) // true
console.log(13, regex.test('/solutions/00000')) // false
console.log(14, regex.test('/solutions/00000/')) // false
console.log(15, regex.test('/solutions/00000/anything')) // false
console.log(16, regex.test('/bug')) // false
console.log(17, regex.test('/search?query=javascript')) // true
console.log(18, regex.test('/search/?query=javascript')) // true
因此,此正則表達式可防止以下錯誤:
防止測試子字符串而不是完整路徑名:
/bug/solutions/99043 // 錯誤的
阻止測試只是解決方案編號的一部分:
/solutions/990430000 // 錯誤的
/solutions/000099043 // 錯誤的
添加回答
舉報