我有这段代码:
let x = "the *quick* brown fox";
let y = x.replace(/[^\\](\*)(.*)(\*)/g, "<strong>$2</strong>");
console.log(y);
它将*quick*
替换为<strong>quick</strong>
问题是我希望反斜杠也能被转义,这样\*quick*
就不会被转换为<strong>quick</strong>
我通过在正则表达式中要求前面的字符不是斜杠来实现这一点。
不幸的是,这也会使结果中的该字符消失。
因此,结果变成了:
the<strong>quick</strong> brown fox
(注意缺少空格)
我想也许我可以将正则表达式的后半部分包装在一个捕获组中,只替换那个部分,但据我所知Javascript的替换功能只适用于完全匹配的字符串。
有没有解决方法?我避免使用完整的markdown库,因为我只需要处理几种情况(加粗和斜体),所以我试图保持简单。
([^\\])(\*)(.*)(\*)
,并用$1<strong>$3</strong>
替换,但这也不正确,因为反斜杠本身可能会被转义。贪婪的.*
也可能效果不佳...还有混合强调标记的情况...最好使用一个库,或者至少编写不基于正则表达式替换的代码。 - Ry-$1<strong>$3</strong>
非常接近但并不完全符合要求。我有点希望我只需要解决这个小问题,而不必迁移到一个完整的库。 - Ryan Peschel