繁体   English   中英

regex.exec() - 无法匹配字符串

[英]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]+?)\*\*(?!\*)/

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

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

我意识到这可能是一个需要了解标记工作方式的问题,但通常不会有问题......对吗?

更新1

你可以看到我已经工作了(这需要marked.js) 这里 要查看如何通过我的扩展程序解析标记的标记,您可以在此处 查看第658行

stronghighlight修改了underlinestronghighlight正则表达式,并在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM