Javascript Regex不格式化每个实例

Javascript Regex not formatting each instance

本文关键字:实例 格式化 Regex Javascript      更新时间:2023-09-26

我正在制作一个简单的基于JavaScript的所见即所得编辑器,使用正则表达式将其转换为html。

这是我使用的javascript转换方法

message = message.replace(/'*'*(.*)'*'*/g, "<b>$1</b>");

它将用两个**包围的文本转换为粗体。问题是,它并不是对每个实例都这样做。相反,它从**的第一个实例开始到最后一个实例。

所以**bold text** **bold text**

给我

粗体文本* *粗体文本

<b>bold text* *bold text</b>
不是

<b>bold text</b> <b>bold text</b>

我如何设置它来转换每个实例,而不是将它们分组在一起?

您需要将量词更改为.*?以使其不贪婪:

message = message.replace(/'*'*(.*?)'*'*/g, "<b>$1</b>");
//                                ^

您当前的regex是一种不错的,并捕获您的前两个星星之后的任何字符,因为.*匹配任何regex将继续吃你的数据,直到它找到**的最后一次出现,这是在最后,这就是为什么你得到的结果。

试着用:

message = message.replace(/'*'*(.*?)'*'*/g, "<b>$1</b>");

这个小?使正则表达式非贪婪,这意味着它将在第一次出现两个星星时停止。或者你可以这样做:

message = message.replace(/'*'*([A-Za-z0-9_- ]+)'*'*/g, "<b>$1</b>");

问题是你的(.*)正在捕获一切。这应该可以解决您的问题:

'*'*([^'*]+)'*'*

这个的问题是,它将匹配这个:**fjffj**而不是这个:**ffff*gggg**