5

好吧,这就是交易。我正在使用捷联来呈现降价帖子。捷联使用标记来解析这些降价帖子,而后者又使用正则表达式文字

我已尝试扩展标记以包含以下降价“扩展”,如此所述(向soffes 大喊大叫)。

背景信息

下划线扩展/_(.*?)_/
的文字:高亮扩展的文字:/==(.*?)==/

下划线测试代码(为清楚起见省略了一些代码):

var src = "two new features to the marked.js inline lexer. ==highlighted text==, and _underlined text_";
var underline = /_(.*?)_/;
var cap = underline.exec(src);
document.write("<em class='underline'>"+cap[1]+"</em>");

它按预期工作(输出<em class="underline">underlined text</em>)。
这是高亮测试代码(同样,省略了一些内容):

var src = "two new features to the marked.js inline lexer. ==highlighted text==, and _underlined text_";
var highlight = /==(.*?)==/;
var cap = highlight.exec(src);
document.write("<strong class='highlighted'>"+cap[1]+"</strong>");

再次按预期工作(输出<strong class='highlighted'>highlighted text</strong>)。

问题

标记的内联词法分析器的所有正则表达式文字都以^. IE:

tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
link: /^!?\[(inside)\]\(href\)/,
reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/

所以很自然,我觉得我也应该这样做。我像这样修改我的文字:
下划线扩展/^_(.*?)_/
的文字:高亮扩展的文字:/^==(.*?)==/

然后,突出显示停止匹配。有趣的是,下划线继续匹配

我意识到这可能是一个需要了解标记的工作原理的问题,但问...通常不会有什么坏处……对吗?

更新 1

你可以在这里看到我已经完成的工作(需要marked.js)。要查看标记如何被告知使用我的扩展解析降价,您可以在此处查看第 658 行

4

2 回答 2

1

我稍微修改了underline和正则表达式,并添加到正则表达式中以使其工作:stronghighlight|==text

text: /^[\s\S]+?(?=[\\<!\[_*`]|==| {2,}\n|$)/,
stronghighlight: /^==([^=]+)==/,
underline: /^_([^_]+)_/

我的 jsfiddle 测试页面在这里。为了简单起见,我在开头复制了marked.js,并在原地进行了编辑。

于 2013-08-14T15:04:46.660 回答
0

=首先,您-再次混合:您有stronghighlight: /^--(.*?)--/,但在文本中您有==text==

接下来,看看这一行:

text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/

这定义了一个普通的文本块。它将“文本”定义为\, <, !, [, _, 或之前的任何内容*
你的-=不在那里,所以你的格式被文本块消耗。

于 2013-08-14T14:06:37.103 回答