Вы можете использовать следующее регулярное выражение:
^\/((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
// false
- Предотвращает тестирование только части чисел решений:
/solutions/990430000
// false
/solutions/000099043
// false