Pregunta

Lo que estoy tratando de lograr aquí es digamos que tenemos dos URL de ejemplo:

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
url2 = "http://www.example.com/"

¿Cómo puedo extraer las direcciones URL de rayas abajo?

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa"
url2 = "http://http://www.example.com"

URI.parse en Ruby desinfecta cierto tipo de dirección URL incorrecta, pero es ineficaz en este caso.

Si usamos /^(.*)\/$/ entonces la expresión regular elimina una sola barra de / url1 y es ineficaz para url2.

Hay alguien consciente de cómo manejar este tipo de análisis de URL?

El punto aquí es que no quiero que mi sistema tenga http://www.example.com/ y http://www.example.com siendo tratados como dos URLs diferentes. Y mismo ocurre con http://emy.dod.com/kaskaa/dkaiad/amaa//// y http://emy.dod.com/kaskaa/dkaiad/amaa/.

¿Fue útil?

Solución

Si sólo tiene que quitar todas las barras desde el final de la cadena de URL a continuación, puede probar la siguiente expresión regular:

"http://emy.dod.com/kaskaa/dkaiad/amaa//////////".sub(/(\/)+$/,'')
"http://www.example.com/".sub(/(\/)+$/,'')

/(\/)+$/ - esta expresión regular encuentra una o más barras al final de la cadena. Entonces sustituimos este partido con la cadena vacía.

Espero que esto ayude.

Otros consejos

A pesar de que este hilo es un poco viejo y la respuesta de arriba es bastante bueno, pero sugiere otra manera de hacer esto:

/^(.*?)\/$/

Se podía ver en acción aquí: https://regex101.com/r/vC6yX1/2

La magia aquí es *?, lo que hace un partido flojo. Así que toda la expresión podría traducirse como:

Partido el menor número de caracteres como se puede y capturarlo, mientras que partido tantas barras como pueda al final.

Lo que significa que, en un Inglés más claro, elimina todas las barras al final.

def without_trailing_slash path
  path[ %r(.*[^/]) ]
end

path = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"

puts without_trailing_slash path # "http://emy.dod.com/kaskaa/dkaiad/amaa"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top