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/