我有一个关于 Javascript 中正则表达式匹配的非常具体的问题。我正在尝试匹配一段源代码,更具体地说是这里的一部分:
<TD WIDTH=100% ALIGN=right><a href="http://forum.tibia.com/forum/?action=main&sectionid=2">World Boards</a> | <a href="http://forum.tibia.com/forum/?action=board&boardid=106121">Olympa - Trade</a> | <b>Bump when Yasir...</b></TD>
我想要匹配的部分是boardid=106121">Olympa - Trade</a>
,我真正需要的部分是“Olympa”。因此,我使用以下 JS 代码行来获取匹配项并返回“Olympa”:
var world = document.documentElement.innerHTML.match('/boardid=[0-9]+">([A-Z][a-z]+)( - Trade){0,1}<\/a>/i')[1];
the ( - Trade)
在我的问题中,部分是可选的,因此{0,1}
在正则表达式中。
也没有更简单的方法来缩小代码范围,例如getElementsByTagName,所以搜索完整的源代码是我唯一的选择。
现在有趣的是。我使用了两个在线正则表达式匹配器(其中一个专门用于 JS-regex)来根据完整的源代码测试我的正则表达式。两次,它都匹配并返回“Olympa”,正如它应该的那样。但是,当我让 Chrome 在实际页面上包含脚本时,会出现以下错误:
Error in event handler for 'undefined': Cannot read property '1' of null TypeError: Cannot read property '1' of null
显然,我的行的第一部分返回“null”,因为它没有找到匹配项,并且采用“null”的 [1] 不起作用。
我想我可能没有在源代码上进行匹配,但是当我让脚本输出时document.documentElement.innerHTML
到控制台,它输出完整的源代码。
我看不出这个正则表达式失败的原因,所以我一定忽略了一些非常愚蠢的事情。还有其他人看到问题吗?
感谢所有帮助,
肯尼思