我正在创建一个文本编辑器界面,用户可以在其中设置文本格式,然后他可以在旁边的div中看到修改。
为了突出显示一堆文本,我在下面的** text **中保留了两个星号,就像在stackoverflow中一样。
我的代码如下所示:
replace(/\*{2}([^\*]*)\*{2}/g, "<strong>$1</strong>")
但我的问题是,如果文本中包含星号,则可以看到以下输出:
**文字* **,
而非文字*
如何排除用于匹配的双字符以不破坏输出中的HTML标记?
最佳答案
您只需添加(?:\*[^*]+)*
即可处理单个星号,然后再处理至少一个其他字符:
yourstr = yourstr.replace(/\*\*([^*]*(?:\*[^*]+)*)\*\*/g, "<strong>$1</strong>");
请注意,在字符类中转义
*
是没有用的,并且写\*{2}
的时间长于\*\*
。关于javascript - 正则表达式,匹配所有内容,双星号除外,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54388852/