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

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

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

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