Javascript正则表达式匹配在实际页面上失败,但正则表达式测试工作正常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript正则表达式匹配在实际页面上失败,但正则表达式测试工作正常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1855字,纯文字阅读大概需要3分钟。
内容图文
关于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];
( – 贸易)部分在我的问题中是可选的,因此正则表达式中的{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到控制台时,它会输出完整的源代码.
我认为这个正则表达式没有理由失败,所以我必须忽略一些非常愚蠢的东西.有没有人看到这个问题?
所有帮助赞赏,
肯尼斯
解决方法:
你将正则表达式放在一个字符串中.它不应该在字符串中.
var world = document.documentElement.innerHTML.match(/boardid=[0-9]+">([A-Z][a-z]+)( - Trade){0,1}<\/a>/i)[1];
另一件事 – 看起来你有一个文档对象,在这种情况下,所有这些HTML都已经为你解析了,你可以利用它而不是重新发明一个脆弱的轮子.
var element = document.querySelector('a[href*="boardid="]');
var world = element.textContent;
(这假设您不需要< = IE8支持.如果您这样做,仍然有更好的方法.) (P.S.?是{0,1}的简写.)
内容总结
以上是互联网集市为您收集整理的Javascript正则表达式匹配在实际页面上失败,但正则表达式测试工作正常全部内容,希望文章能够帮你解决Javascript正则表达式匹配在实际页面上失败,但正则表达式测试工作正常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。