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

384
Vistas
JS regex: Alternativa para mirar atrás positivo/negativo

Tengo problemas con la siguiente expresión regular que funciona en Safari, por lo que tengo que cambiar la forma en que me acerco a esta expresión regular. Necesito la siguiente expresión regular para seleccionar solo el texto entre: cp1= y | .

Por ejemplo, si tuviera esta cadena:

firstName=John|lastName=Smith|cp1=/en-gb/|age=30

Solo quiero obtener /en-gb/ y nada más.

El siguiente JS funciona a continuación en todos los navegadores que he probado excepto Safari:

 // if myString = firstName=John|lastName=Smith|cp1=/en-gb/|age=30 let currentCP1Value = myString.match(/(?<=cp1=)(.*)(?=\|)|(?<=cp1=).*(?<!a)$/); // outputs /en-gb/

Esto se debe a la búsqueda posterior positiva/negativa utilizada en la expresión regular. ¿Cuál sería la alternativa a esto para que funcione en Safari?

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

0

Sobre el patrón que probaste:

  • Esta parte del patrón (.*)(?=\|) Coincide hasta el final de la línea y luego retrocede hasta que puede afirmar un | a la derecha, que puede coincidir demasiado si hay varias apariciones de | siguiendo.

  • Esta parte del patrón |(?<=cp1=).*(?<!a)$ es la segunda alternativa, que también coincide hasta el final de la línea y afirma que no termina con a carácter a, lo que parece fuera de lugar como desea hacer coincidir /en-gb/ terminando en /

No necesita mirar alrededor para obtener /en-gb/ , puede usar un grupo de captura como ya está usando en su patrón.

Use una clase de carácter negado [^|]* para hacer coincidir cualquier carácter excepto | para no cruzarse con el siguiente.

 \bcp1=([^|]*)

Demostración de expresiones regulares

 const myString = "firstName=John|lastName=Smith|cp1=/en-gb/|age=30" let currentCP1Value = myString.match(/\bcp1=([^|]*)/); if (currentCP1Value) { console.log(currentCP1Value[1]); }

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Por qué usar expresiones regulares en absoluto? Si sus datos no contienen texto que pueda interpretarse como segmentos codificados de URL, simplemente puede reemplazar | con & y ahora tiene una cadena de consulta estándar para la que JS tiene un análisis incorporado a través de URLSearchParams :

 const parsed = new URLSearchParams(input.replaceAll(`|`, `&`)); const cp = parsed.get(`cp1`); // and many utility functions to perform further work

y tu estas listo.

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