Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

194
Vistas
Regex: reemplazar el último segmento de la URL

Trato de averiguar la expresión regular correcta para reemplazar el último segmento de una URL con una versión modificada de ese último segmento. (Sé que hay hilos similares, pero ninguno pareció ayudar...)

Ejemplo:

 https://www.test.com/one/two/three/mypost/ ---> one/two/three?id=mypost https://www.test.com/one/mypost/ ---> one?id=mypost

Ahora estoy atrapado aquí: https://regex101.com/r/9GqYaU/1

Puedo obtener el último segmento al capturar el grupo 2, pero ¿cómo lo reemplazaría? Creo que tendré que hacer algo como esto:

 const url = 'https://www.test.com/one/two/three/mypost/' const regex = /(http[s]?:\/\/)([^\/]+\/)*(?=\/$|$)/ const path = url.replace(regex, `${myUrlWithoutTheLastSegmentAnd WithoutHTTPS}?id=$2`) return path

Pero no tengo idea de cómo obtener la URL sin el último segmento. Actualmente solo tengo acceso a la cadena completa o al grupo 1 (que es inútil en este caso) y luego al grupo 2, pero no a la cadena sin el grupo 2.

Estaría muy contento por cualquier ayuda aquí. A veces simplemente me falta el conocimiento de lo que es posible con expresiones regulares y cómo lograrlo.

Gracias de antemano.

Salud

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar la clase de URL para extraer el nombre de la ruta y la substring para eliminar el primer '/'.

Luego, puede poner la última parte del nombre de la ruta en un grupo y usarla como referencia $1 para el reemplazo.

 const url = new URL('https://www.test.com/one/two/three/mypost/').pathname.substring(1) console.log(url.replace(/\/([^/]*)\/$/, '?id=$1'))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Me encontré con su pregunta ayer y estoy de acuerdo con seguir la ruta de analizar la URL. Una vez que llegue allí, incluso podría usar métodos de matriz de JavaScript que prefiero a métodos de cadena como:

 pathname.split("/").filter(p => p.length).pop()

Esto separaría cada carpeta, ignoraría cualquiera sin longitud (es decir, manejaría una barra diagonal) y devolvería la última ( mypost ).

De todos modos, también estoy aprendiendo expresiones regulares, por lo que a veces, cuando encuentro una pregunta como esta, solo trato de encontrar la respuesta de todos modos, ya que es la mejor manera de aprender. Me tomó 24 horas 😂 Se me ocurrió esto:

 /(https?:\/\/).+?([az-]*)\/?$/gm

(https?:\/\/) sabes lo que hace esto. Pequeña corrección, no necesitas los corchetes. El signo de interrogación coincide con 0 o 1 del carácter anterior. Como solo estamos emparejando s esto simplemente funciona. Si quisiera hacer coincidir s o z, usaría [sz]? . Pienso.

.+? este es el genial que creo que usaré en el futuro ahora que lo encontré. El signo de interrogación aquí tiene un significado diferente: hace que .+ (que significa uno o más de cualquier carácter) no sea codicioso. Eso significa que deja de aplicarse una vez que llega a la siguiente regla. Cual es...

([az-]*) cualquier número de letras o un guión. Tal vez debería cambiar esto para incluir números y mayúsculas.

\/? barra inclinada opcional

$ todo esto debe aplicarse al final de la cadena.

Aquí hay una demostración https://regex101.com/r/mQNkIS/1

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda