javascript - 带有正则表达式的 Markdown 编辑器未生成所需的输出

标签 javascript regex

Please check out this codepen for a working code example

我有两个正则表达式

//Matches ol:whatever: and turns it into <ol>whatever</ol>
var olRegex = /ol:[\s\r\f\n]?([\s\S\r\f\n]*)[\r\f\n]:/;

//Matches li:whatever: and turns it into <li>whatever</li>
var liRegex = /li:(.*):/gi;

如果我输入

ol:
li:This is item 1:
li:This is item 2:
:

它将被这个输出正确替换

<ol>
    <li>This is item 1</li>
    <li>This is item 2</li>
</ol>

但是如果我像这样添加 2 个 block

ol:
li:This is item 1:
li:This is item 2:
:
ol:
li:This is item 1:
li:This is item 2:
:

它没有产生我期望的结果,而是产生了这个输出

<ol>
    <li>This is item 1</li>
    <li>This is item 2</li>
: // I want the olRegex to stop matching here

ol:
    <li>This is item 1</li>
    <li>This is item 2</li>
</ol>

我要它输出

<ol>
    <li>This is item 1</li>
    <li>This is item 2</li>
</ol>
<ol>
    <li>This is item 1</li>
    <li>This is item 2</li>
</ol>

我的 olRegex 不包含 g 标志,为什么它在遇到第一个 : 时不停止匹配自己的线?

最佳答案

var olRegex =/ol:[\s\r\f\n]?([\s\S\r\f\n]*)[\r\f\n] 行中:/; * 的使用将尽可能读取匹配 [\s\S\r\f\n] 的字符,直到找到最后一个可能的字符[\r\f\n]:(贪心)。

您可以使用 *? 代替 *,它会尝试尽可能少地匹配这些字符(惰性)。

通过使用 g 标志执行此操作,您将得到所需的匹配组。

关于javascript - 带有正则表达式的 Markdown 编辑器未生成所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776558/

相关文章:

javascript - 针对 HTML5 视频播放器优化的 Javascript

javascript - Angular 谷歌地图

javascript - 如何防止访问者通过检查员查看我的网站?

PHP 、 Javascript 和 SQL 代码混淆

objective-c - 使用正则表达式查找/替换 NSString 中的子字符串

python - 在 python 中使用正则表达式 re.split 拆分堆叠实体

regex - expr 正则表达式中的变量

javascript - 图像映射为圆形区域设置背景图像

javascript - 在 javascript 中对正则表达式进行分组

python - 正则表达式匹配数字和它们之间最多一个空格