好吧,所以这是交易。我正在使用strapdown来渲染降价帖子。捷联使用marked来解析这些降价帖子,这些帖子又使用正则表达式文字。
我 尝试 扩展标记以包含以下标记“扩展”,如here所述(shoutout to 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>
)。
标记的内联词法分析器用^
开始所有的正则表达式文字。
即:
tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
link: /^!?\[(inside)\]\(href\)/,
reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/
很自然地,我觉得我应该这样做。我修改我的文字:
下划线延伸的字面值:/^_(.*?)_/
高亮扩展的文字:/^==(.*?)==/
然后,突出显示停止匹配。有趣的是,下划线继续匹配。
我意识到这可能是一个需要了解标记工作方式的问题,但通常不会有问题......对吗?
答案 0 :(得分:1)
我稍微修改了underline
和stronghighlight
正则表达式,并将|==
添加到text
正则表达式以使其正常工作:
text: /^[\s\S]+?(?=[\\<!\[_*`]|==| {2,}\n|$)/,
stronghighlight: /^==([^=]+)==/,
underline: /^_([^_]+)_/
我的jsfiddle测试页面是here。为简单起见,我在开头复制了marked.js并将其编辑到位。
答案 1 :(得分:0)
首先,您再次混合=
和-
:您有stronghighlight: /^--(.*?)--/
,但在文本中您有==text==
。
接下来,看看这一行:
text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
这定义了正常的文本块。它将“文本”定义为\
,<
,!
,[
,_
或*
之前的任何内容。
您的-
或=
不存在,因此您的格式会被文本块占用。