Funciona en Chrome, pero falla en Safari: expresión regular no válida: nombre del especificador de grupo no válido /(?<=\/)([^#]+)(?=#*)/

Resuelto techguy2000 asked hace 6 años • 5 respuestas

En mi código Javascript, esta expresión regular /(?<=\/)([^#]+)(?=#*)/funciona bien en Chrome, pero en Safari obtengo:

Expresión regular no válida: nombre del especificador de grupo no válido

¿Algunas ideas?

techguy2000 avatar Jul 28 '18 13:07 techguy2000
Aceptado

Parece que Safari aún no admite la búsqueda hacia atrás (es decir, tu (?<=\/)). Una alternativa sería colocar el /que viene antes en un grupo no capturado y luego extraer solo el primer grupo (el contenido después y /antes del #).

/(?:\/)([^#]+)(?=#*)/

Además, (?=#*)es extraño: probablemente desee buscar algo (como #el final de la cadena) en lugar de un *cuantificador ( cero o más apariciones de #). Quizás sería mejor usar algo como

/(?:\/)([^#]+)(?=#|$)/

o simplemente omitir la anticipación por completo (porque es ([^#]+)codicioso), dependiendo de sus circunstancias.

CertainPerformance avatar Jul 28 '2018 06:07 CertainPerformance

Regex ?<=no es compatible con Safari iOS, podemos usar ?: Nota: /o la primera letra de referencia que viene antes en un grupo no capturado

Ver detalle: https://caniuse.com/js-regexp-lookbehind

let str = "Get from Slash/to Next hashtag #GMK"


let workFineOnChromeOnly = str?.match(/(?<=\/)([^#]+)(?=#*)/g)
console.log("❌ Work Fine On Chrome Only", workFineOnChromeOnly )


let workFineSafariToo = str?.match(/(?:\/)([^#]+)(?=#*)/g)
console.log("✔️ Work Fine Safari too", workFineSafariToo )
Expandir fragmento

GMKHussain avatar Jan 03 '2023 13:01 GMKHussain

Safari agregó soporte retrospectivo en 16.4.

https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes#JavaScript

Tonni avatar Apr 14 '2023 08:04 Tonni

El soporte para RegExp mira detrás de las afirmaciones emitidas por el kit web:

Consulte el enlace: https://github.com/WebKit/WebKit/pull/7109

JBB avatar Dec 21 '2022 13:12 JBB