Estoy tratando de obtener una búsqueda hacia delante opcional, pero estoy teniendo problemas en los que, tan pronto como lo hago opcional (Agrega un ?
después de él), ya no coincide incluso cuando los datos están ahí.búsqueda hacia delante expresiones regulares opcional
Como breve resumen, estoy tratando de sacar params cadena de consulta específicos de un URI. Ejemplo:
/.*foo.html\??(?=.*foo=([^\&]+))(?=.*bar=([^\&]+))/
.exec('foo.html?foo=true&bar=baz')
I va a romper que un poco:
.*foo.html\?? // filename == `foo.html` + '?'
(?=.*foo=([^\&]+)) // find "foo=...." parameter, store the value
(?=.*bar=([^\&]+)) // find "bar=...." parameter, store the value
El ejemplo anterior funciona perfectamente bajo la condición de que tanto foo
y bar
existen como parámetros en la cadena de consulta. La cuestión es que estoy tratando de hacer que estos opcional, por lo que cambió a:
/.*foo.html\??(?=.*foo=([^\&]+))?(?=.*bar=([^\&]+))?/
↑ ↑
Added these question marks ─┴──────────────────┘
y ya no coincide con ningún parámetro, aunque sigue coincidiendo con foo.html
. ¿Algunas ideas?
¿Por qué usa expresiones regulares para esto? Simplemente divida la cadena y almacene los pares clave/valor en un objeto. – ThiefMaster
@ThiefMaster - Porque quiero :) Y quiero aún más ahora que no funcionará. En realidad, es simplemente porque el código es mucho más corto cuando solo necesito obtener 2 params. –
¿Por qué necesita mirar hacia adelante? Para hacer coincidir foo.html? Bar = baz & foo = true también? – Bergi