Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

189
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!