Pozostałe odpowiedzi są doskonale dobrze dla twojego konkretnego problemu, ale jak zauważył Paulpro, naprawdę wymykasz się spod kontroli, gdy masz więcej niż dwa słowa.
Najprostszym wyjściem jest użycie wielu czeków, jak sugerują Pigułki Eksplozyjne.
Ale bardziej skalowalnym regex tylko podejść można użyć lookaheads:
/^(?=.*google)(?=.*microsoft)(?=.*apple).../
uprzedzona faktycznie nie spożywać niczego, więc po pierwszym warunkiem jest sprawdzany (to .*google
można dopasować), jesteś z powrotem na początku łańcucha i może sprawdzić następny warunek. Wzór przechodzi tylko wtedy, gdy wszystkie wyprzedzające.
Należy pamiętać, że jeśli dane wejściowe mogą zawierać znaki końca wiersza, nie będzie możliwe wykonanie .*
. Będziesz musiał zamiast tego użyć [^]*
lub [\s\S]*
(to samo dotyczy odpowiedzi innych).
@ m.buettner doskonały punkt. –
Wiem, że mogę użyć 'match' dwa razy, ale chciałem go z regex, aby było krótsze .. ale z regex wydaje się być dłuższy niż przy użyciu' match' dwa razy – Enve
@Enve krótki kod niekoniecznie jest najbardziej czytelny. Zwłaszcza jeśli "długi" kod pasuje już do jednej lub dwóch linii. –