Estoy tratando de usar expresiones regulares para convertir la versión de formato de descuento de Slack a código BB. Estoy atascado en los enlaces en este momento. Formatos de Slack como este:
<www.url.com|This is the actual text> <www.url.com>Formatos de código BB como este:
[url=www.url.com]This is the actual text[/url] [url]www.url.com[/url]Estoy tratando con el primer tipo usando esto (en javascript)
string.replace(/\<([\s\S]+)(?=\|)\|([\s\S]*?)\>/gm, "[url=$1]$2[/url]" Estoy luchando por crear una segunda regla que solo coincida con el texto entre <...> si no hay un | en la cuerda. ¿Puede alguien ayudarme?
Además, si hay una manera ordenada de tratar con ambas opciones a la vez, ¡avísame!
Puedes usar
const text = `<www.url.com|This is the actual text> <www.url.com>`; console.log( text.replace(/<([^<>|]*)(?:\|([^<>]*))?>/g, (x, url, text) => text !== undefined ? `[url=${url}]${text}[/url]` : `[url]${url}[/url]`) )Vea la demostración de expresiones regulares . Detalles :
< - a < char ( NUNCA escape este carácter en ningún tipo de expresión regular si planea hacer coincidir un < char)([^<>|]*) - Grupo 1: cualquier cero o más caracteres que no sean < , > y |(?:\|([^<>]*))? - un grupo de no captura opcional que coincide con una o ninguna aparición de un | y luego cualquier cero o más caracteres que no sean < y > capturados en el Grupo 2> - a > char (de nuevo, por favor, nunca escapes del > carácter literal en ningún tipo de expresión regular).