Javascript 正则表达式匹配在实际页面上失败,但正则表达式测试工作得很好

2024-01-23

我有一个关于 Javascript 中正则表达式匹配的非常具体的问题。我正在尝试匹配一段源代码,更具体地说是这里的一部分:

<TD WIDTH=100% ALIGN=right><a href="http://forum.tibia.com/forum/?action=main&amp;sectionid=2">World Boards</a> | <a href="http://forum.tibia.com/forum/?action=board&amp;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到控制台,它输出完整的源代码。

我看不出这个正则表达式失败的原因,所以我一定忽略了一些非常愚蠢的事情。还有其他人看到问题吗?

感谢所有帮助, 肯尼思


您将正则表达式放入字符串中。它不应该位于字符串内。

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;

(这假设您不需要

(P.S. ?是简写{0,1}.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 正则表达式匹配在实际页面上失败,但正则表达式测试工作得很好 的相关文章

  • 单击传单形状时如何获取它的图层类型?

    我的 Leaflet 项目允许用户绘制形状 线条 矩形和多边形 用户可以单击形状来获取其统计数据 面积 周长等 我在我的FeatureGroup 上尝试了一个点击事件 其中添加了我绘制的所有形状 我不确定这是否是最好的方法 然后单击后 将调
  • 如何在 HTML 链接中使用 JavaScript 变量

    我正在开发的网站有一个标签指向与网站所具有的 URL 不同的 URL 我想做的是绕过使用下面的 trueURL 标记来查找网页的网址 因为我需要它来构造一些内部锚点 因为我需要网站的实际网址 以便内部锚点正常工作 我遇到的问题是我不知道应该
  • Javascript dispatchEvent click 在 IE9 和 IE10 中不起作用

    我正在尝试在 ExtJs 中构建应用程序时模拟鼠标事件 例如单击 鼠标悬停等 我使用下面的代码来模拟点击 function triggerEvent element eventName if document createEvent var
  • jquery如何获取右、左、上、下箭头键值

    我使用了下面的代码 每当单击箭头键 左 右 上 下 时 我得到的键值为 0 任何人都可以帮忙解决这个问题吗 document keypress function e alert key value e which 如何获取 上 下 右 左
  • scrollTop 在 Chrome 中不起作用,建议的解决方法也不起作用

    许多其他问题 here https stackoverflow com questions 2544979 is there a problem with scrolltop in chrome here https stackoverfl
  • 停止 ASP.NET 按钮的页面重新加载

    NET 应用程序中 我插入了一个调用 Javascript 函数的按钮 OnClientClick事件 和 VB NET 函数 OnClick event
  • 如何向 DOM 添加支持 Angular 的元素?

    我想以编程方式添加一些支持 Angular 的 DOM 元素 实际上 我可能需要添加自定义组件 我该怎么做 这是一个简单的小提琴来演示这个问题 http jsfiddle net ZJSz4 2 http jsfiddle net ZJSz
  • 如何通过两个输入文本字段组合表中的搜索?

    我的桌子看起来像这样 table tr td Apple td td Green td tr tr td Grapes td td Green td tr tr td Orange td td Orange td tr table 搜索的j
  • javascript 中的正则表达式和分隔符

    我不太擅长正则表达式 我需要一些帮助 但我被困住了 这就是我得到的 编辑 现在工作正常 看看 http jsfiddle net oscarj24 qrPHk 1 http jsfiddle net oscarj24 qrPHk 1 这就是
  • 根据路由动态加载 Node.js 模块

    我正在使用 Express 在 Node js 中做一个项目 这是我的目录结构 root start js server js lib api user getDetails js user register js The lib api
  • 如何通过 Web-Workers 传递自定义类实例?

    由于 Web Worker JSON 在线程之间序列化数据 因此这样的方法不起作用 worker js function Animal Animal prototype foobar function self onmessage func
  • 从 Web 浏览器控件读取 Javascript 变量

    我正在尝试读取从表单上的 WebBrowser 控件加载和调用的 Javascript 变量的值 Example index html 引用名为 test js 的 javascript 在 test js 上 创建并填充了几个变量 然后i
  • 用角度js中的字母过滤列表

    我在表格中显示了一个列表 我需要使用名称的第一个字母来过滤结果 在列表上方我有一个字母 A B C D 等等 单击后 字母列表将按名字过滤 例如 列表详细信息是Apple Boy Bridge点击后A Apple将显示 我必须过滤国家名称以
  • 有没有办法通过 JavaScript 检测我是否处于 Selenium Webdriver 页面中?

    我想禁止初始化TinyMCE https www tiny cloud 在我的测试中 如果 JavaScript 可以检测到我正在 Selenium 自动化页面中运行 则可以轻松完成此操作 那么 是否有一些 JavaScript 代码可以用
  • 时间序列折线图与轴不同步

    本实验基于这个d3官方例子 http bost ocks org mike path 我想要实现的是可视化时间序列数据的最后 x 分钟 我有这个代码的副本jsfiddle http jsfiddle net 225dC 3 单击以添加新数据
  • 如何使用 JavaScript 使 DIV 可见和不可见?

    你能做类似的事情吗 function showDiv DIV visible true or something 如果 DIV 是一个元素那么 DIV style visibility visible OR DIV style visibi
  • 对数滑块

    我有一个值范围从 0 到 100 的滑块 我想将它们映射到 100 到 10 000 000 的范围 我在网上看到过一些函数 但它们都是用 C 编写的 我需要它在 JavaScript 中 有任何想法吗 您可以使用这样的函数 functio
  • jquery ui 自动完成添加跨度

    我在 div 上使用 jQuery 自动完成 但我得到了 jquery 自动添加的额外范围 span class ui helper hidden accessible search test span 如何防止创建此跨度 我通过添加 CS
  • codemirror - 在编辑器内检测并创建链接

    我正在使用 codemirror 配置为显示 javascript 我有这样的代码 var ref http www example com test html var ref2 http www example com test2 htm
  • 返回语句后的声明

    function f return f1 function f1 return 5 f returns 5 为什么这有效 之后声明局部函数有什么好处return 这是好的做法吗 它之所以有效 是因为函数声明都是由解释器在第一次传递时评估的

随机推荐