正则表达式,匹配所有内容,双星号除外

时间:2019-01-27 13:52:17

标签: javascript regex regex-negation

我正在创建一个文本编辑器界面,用户可以在其中格式化文本,并且他可以在其旁边的div中看到所做的修改。

为突出显示一堆文本,我在下面的** 文本 **中保留了两个星号,就像在stackoverflow中一样。

我的代码如下:

replace(/\*{2}([^\*]*)\*{2}/g, "<strong>$1</strong>")

但是我的问题是,如果文本中包含星号,则可以看到以下输出:

**文字* **,

而不是文本*

如何排除用于匹配的双字符以不破坏输出中的HTML标记?

1 个答案:

答案 0 :(得分:1)

您只需添加(?:\*[^*]+)*即可处理单个星号,然后再处理至少一个其他字符:

yourstr = yourstr.replace(/\*\*([^*]*(?:\*[^*]+)*)\*\*/g, "<strong>$1</strong>");

请注意,在字符类中转义*是没有用的,并且写\*{2}的时间长于\*\*