[英]regex.exec() - failing to match string
好吧,所以这是交易。 我正在使用捷联来呈现降价帖子。 stripdown使用标记来解析这些降价帖子,这些帖子又使用正则表达式文字 。
我一直试图扩大标记为包括下列降价“扩展”的描述这里 (大喊答题节目环节以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]+?)\*\*(?!\*)/
所以很自然地,我觉得我应该这样做。 我修改我的文字像这样:
下划线扩展的文字:/ /^_(.*?)_/
高亮扩展的文字:/ /^==(.*?)==/
然后, 突出显示停止匹配 。 有趣的是, 下划线继续匹配 。
我意识到这可能是一个需要了解标记工作方式的问题,但通常不会有问题......对吗?
你可以看到我已经工作了(这需要marked.js) 这里 。 要查看如何通过我的扩展程序解析标记的标记,您可以在此处 查看第658行
我stronghighlight
修改了underline
和stronghighlight
正则表达式,并在text
正则表达式中添加了|==
以使其工作:
text: /^[\s\S]+?(?=[\\<!\[_*`]|==| {2,}\n|$)/,
stronghighlight: /^==([^=]+)==/,
underline: /^_([^_]+)_/
我的jsfiddle测试页面就在这里 。 为简单起见,我在开头复制了marked.js并将其编辑到位。
首先,你是混合=
和-
再次:你有stronghighlight: /^--(.*?)--/
-
stronghighlight: /^--(.*?)--/
,但在文本中你有==text==
。
接下来,看看这一行:
text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
这定义了正常的文本块。 它将“text”定义为\\
, <
,!之前的任何内容!
, [
, _
或*
。
您的-
或=
不存在,因此您的格式由文本块使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.