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

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

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 Report

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 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!