Będziesz mieć problem rozwiązujący ten cały problem samymi wyrażeń regularnych.
To znaczy, nie ma wyrażenie regularne, że zrobi wszystko, co następuje:
- wybierz nic nie jesteś zainteresowany
- przechwytywania wszystko jesteś zainteresowany
- wychwytywania zmienna liczba dopasowań
Ostatnie wymaganie - zmienna liczba przechwytów - jest duże. Użytkownik StackOverflow Tomalak described the situation quite well:
Grupy są zdefiniowane w nawiasach. Twój wynik meczu będzie zawierał tyle grup, ile par nawiasów w twoim regex (oprócz zmodyfikowanych nawiasów takich jak (?: ...), które nie będą się liczyć do grup dopasowania). Chcesz dwóch oddzielnych meczów grupowych w wyniku meczu? Zdefiniuj dwie oddzielne grupy w swoim regex.
Jeśli grupa może się równać wiele razy, wartością grupy będzie to, co pasowało do niej ostatnio. Wszystkie wcześniejsze wystąpienia meczów dla tej grupy zostaną zastąpione przez ostatnie dopasowanie.
Nadal można pozwolić wyrażenie regularne zrobić dużo prac, chociaż, na przykład za pomocą granica końca słowa kotwicę \b
. Jest to bardzo podobne do tego, co opisujesz jako "przestrzeń przed i po", ale jest bliżej tego, co chcesz, ponieważ nie pasuje (lub nawet nie wymaga) samej przestrzeni.
> "R I O T".match(/\b\w\b/g)
["R", "I", "O", "T"]
> "FrankerZ R FrankerZ I FrankerZ O FrankerZ T".match(/\b\w\b/g)
["R", "I", "O", "T"]
Chciałeś ilościowe i oczywiście ten regex nie zawiera kwantyfikatorów:
> "test a b test".match(/\b\w\b/g)
["a", "b"]
Ale można to zrobić poza wyrażenia regularnego:
var individual_letters_re = /\b\w\b/g;
function hiddenWord(sentence) {
letters = sentence.match(individual_letters_re);
if (letters && letters.length >= 3) {
return letters.join("");
}
return "";
}
> hiddenWord("R I O T")
"RIOT"
> hiddenWord("FrankerZ R FrankerZ I FrankerZ O FrankerZ T")
"RIOT"
> hiddenWord("test a b test")
""
> hiddenWord("test a b c test")
"abc"
Czy nie dałoby mi to wszystkich pojedynczych listów? Co jeśli ktoś powie "to jest test, RIOT" ', to da ci' "a, r, i, o, t" ', dlatego chcę, aby zaczął on przechwytywać, gdy jest 3 + wystąpień pojedynczych liter z rzędu. Masz pomysł, jak to uwzględnić w kodzie, który napisałeś? – Flipybitz