/ / Regex, aby dopasować opcjonalny parametr - javascript, regex

Regex, aby dopasować opcjonalny parametr - javascript, regex

Próbuję napisać wyrażenie regularne pasujące do opcjonalnego parametru na końcu ścieżki.
Chcę objąć pierwsze 4 ścieżki, ale nie ostatnie:

/main/sections/create-new
/main/sections/delete
/main/sections/
/main/sections
/main/sectionsextra

Do tej pory to stworzyłem:

//main/sections(/)([a-zA-z]{1}[a-zA-z-]{0,48}[a-zA-z]{1})?/g

To tylko pierwsze pierwsze. Jak mogę je dopasować do pierwszych 4 przypadków?

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz dopasować dany ciąg znaków do opcjonalnego ciągu zaczynającego się od / z dowolnym 1 lub więcej znakami innymi niż / po zakończeniu aż do końca łańcucha:

/main/sections(?:/[^/]*)?$
^^^^^^^^^^^^^^

Zobacz regex demo. Jeśli naprawdę potrzebujesz ograniczyć opcjonalną część, to tylko litery i - z - niedozwolone na początku / końcu (o długości 2+ znaków), użyj

//main/sections(?:/[a-z][a-z-]{0,48}[a-z])?$/i

Lub, aby zezwolić na 1 char podrozdziale:

//main/sections(?:/[a-z](?:[a-z-]{0,48}[a-z])?)?$/i

Detale

  • /main/sections - dosłowny podciąg /main/sections
  • (?:/[^/]*)? - opcjonalna grupa niezapisująca, odpowiadająca 1 lub 0 wystąpieniom:
    • / - a / zwęglać
    • [^/]* - zanegowana klasa znaków pasująca do dowolnych znaków 0+ innych niż /
  • $ - koniec ciągu.

JS demo:

var strs = ["/main/sections/create-new","/main/sections/delete","/main/sections/","/main/sections","/main/sectionsextra"];
var rx = //main/sections(?:/[^/]*)?$/;
for (var s of strs) {
console.log(s, "=>", rx.test(s));
}