【发布时间】:2019-09-13 22:51:24
【问题描述】:
我有这个代码:
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>,但这也不正确,因为反斜杠可以自己转义。贪婪的.*可能也不会工作得那么好……然后是混合强调标记……你可能应该使用一个库。或者至少写一些不是基于用正则表达式替换的东西。 -
是的,在我的测试中,我注意到
$1<strong>$3</strong>非常接近,但也不是很接近。我有点希望我能解决这个小问题,而不是必须迁移到一个成熟的库。
标签: javascript regex string markdown