我正在尝试使用正则表达式将 Slack 版本的 Markdown 格式转换为 BB 代码。我现在卡在链接上了。像这样的松弛格式:
<www.url.com|This is the actual text>
<www.url.com>
BB 代码格式如下:
[url=www.url.com]This is the actual text[/url]
[url]www.url.com[/url]
我正在使用它处理第一种类型(在 javascript 中)
string.replace(/\<([\s\S]+)(?=\|)\|([\s\S]*?)\>/gm, "[url=$1]$2[/url]"
我正在努力制定第二条规则,该规则将只匹配 <...>
之间的文本如果没有 |
在字符串中。谁能帮帮我?
此外,如果有一种巧妙的方法可以同时处理这两个选项,请告诉我!
最佳答案
你可以使用
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]`) )
参见 regex demo . 详细信息:
-
<
- 一个<
字符(如果您打算匹配<
字符,请永远不要以任何正则表达式形式转义此字符) -
([^<>|]*)
- 第 1 组:<
以外的任何零个或多个字符,>
和|
-
(?:\|([^<>]*))?
- 可选的非捕获组匹配一次或零次出现的|
然后是<
以外的任何零个或多个字符和>
捕获到第 2 组 -
>
- 一个>
char(同样,请不要在任何正则表达式风格中转义>
文字字符)。
关于javascript - 如何使用正则表达式将 Slack URL 转换为 BB 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71659755/