Tengo una expresión regular que no funciona en mi sitio web, pero cada vez que traté de usarla en jsfiddle, funciona. Mi objetivo era obtener las URL existentes en una oración.
const regex = /\b(?:(?:https?\:\/\/|\b)(?:(?:\d{1,3}\.){3}\d{1,3}|(?<![\@\.])(?:[^\s\/\?\#\@\.]+\.){1,2}[az]{2,3})(?:[\/\#\:\?][^\s\@]*|\b)(?![\@\.]))/gm;Aquí está el error que estoy recibiendo:
SyntaxError: Invalid regular expression: /\b(?:(?:https?\:\/\/|\b)(?:(?:\d{1,3}\.){3}\d{1,3}|(?<![\@\.])(?:[^\s\/\?\#\@\.]+\.){1,2}[az]{2,3})(?:[\/\#\:\?][^\s\@]*|\b)(?![\@\.]))/: Invalid groupUse el " mejor truco de expresiones regulares ", consuma los correos electrónicos primero y luego capture las coincidencias de su patrón.
Aquí hay una forma de extraer las URL:
const regex = /\S+@\S+|\b((?:https?:\/\/)?(?:(?:\d{1,3}\.){3}\d{1,3}|(?:[^\s\/?#@.]+\.){1,2}[az]{2,3})(?:[\/#:?][^\s@]*|\b))(?![@.])/g; let result = [], m; const text = "Visit http://lalala.la or contact lala@lalala.la"; while(m=regex.exec(text)) { if (m[1] !== undefined) result.push(m[1]); } console.log(result);Vea la demostración de expresiones regulares .
El \S+@\S+| parte coincide con uno o más caracteres que no son espacios en blanco, @ y nuevamente uno o más caracteres que no son espacios en blanco, por lo que el resto del patrón puede coincidir en cualquier otro contexto. El código solo devuelve coincidencias del Grupo 1, si las hay (tenga en cuenta los paréntesis de captura alrededor de la segunda alternativa).