Próbuję uzyskać opcjonalny widok z wyprzedzeniem, ale mam problem z tym, gdy tylko zrobię to opcjonalnie (dodam po nim ?
), nie pasuje on już nawet wtedy, gdy dane tam są.Opcjonalny widok z wyprzedzeniem dla regex
Podsumowując, staram się wyciągnąć określone parametry zapytania z URI. Przykład:
/.*foo.html\??(?=.*foo=([^\&]+))(?=.*bar=([^\&]+))/
.exec('foo.html?foo=true&bar=baz')
będę rozpadu, który się nieco:
.*foo.html\?? // filename == `foo.html` + '?'
(?=.*foo=([^\&]+)) // find "foo=...." parameter, store the value
(?=.*bar=([^\&]+)) // find "bar=...." parameter, store the value
Powyższy przykład działa perfekcyjnie, pod warunkiem, że oba foo
i bar
istnieć jako parametry w kwerendy. Problem jest, że próbuję zrobić to opcjonalne, więc zmieniłem go na adres:
/.*foo.html\??(?=.*foo=([^\&]+))?(?=.*bar=([^\&]+))?/
↑ ↑
Added these question marks ─┴──────────────────┘
i już nie pasuje do żadnych parametrów, choć nadal pasuje foo.html
. Jakieś pomysły?
Dlaczego używasz do tego wyrażeń regularnych? Po prostu podziel łańcuch i zapamiętaj pary klucz/wartość w obiekcie. – ThiefMaster
@ ThiefMaster - Ponieważ chcę :) A teraz chcę jeszcze więcej, że to nie zadziała. W rzeczywistości jest tak dlatego, że kod jest znacznie krótszy, gdy potrzebuję uzyskać 2 parametry. –
Dlaczego potrzebujesz przewinięcia z wyprzedzeniem? Aby dopasować także foo.html? Bar = baz & foo = true? – Bergi