Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

206
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda