Javascript返回类型错误";无法获取属性';1';“未定义或空引用的”;

Javascript返回类型错误";无法获取属性';1';“未定义或空引用的”;,javascript,Javascript,我一辈子都不能确切地找出这个错误对于我的代码意味着什么 HTML 无标题文档 工作参考:12345 职位:职位名称 组织:组织名称 地点:英国、英国、伦敦 截止日期:2015年9月24日 工作类型:永久性 年薪:100000英镑 详情: 这是一个描述 JAVASCRIPT DataExtractor.AddHeader(1, 'Country'); var tmp = document.body.outerHTML.match(/Location: <\/b> ([^,

我一辈子都不能确切地找出这个错误对于我的代码意味着什么

HTML

无标题文档
工作参考:12345
职位:职位名称
组织:组织名称
地点:英国、英国、伦敦
截止日期:2015年9月24日
工作类型:永久性
年薪:100000英镑

详情:

这是一个描述

JAVASCRIPT

  DataExtractor.AddHeader(1, 'Country');

  var tmp = document.body.outerHTML.match(/Location: <\/b> ([^,]+), ([^,]+), ([^,]+)/i);

  var country = tmp[1] 

  if (country) {
  for (var i = 0; i < country.length; i++) {

  DataExtractor.StartNewResult();
  DataExtractor.AddResult(1, country[i]);
   }
   }
DataExtractor.AddHeader(1,'Country');
var tmp=document.body.outerHTML.match(/Location:([^,]+),([^,]+),([^,]+),([^,]+)/i);
var国家=tmp[1]
国际单项体育联合会(国家){
对于(变量i=0;i
当运行时,它会给出标题中的错误。有人能解释一下我遗漏了什么吗


谢谢

您是否检查了tmp是否为阵列?试试下面这一段:

var country
if( tmp ){
country = tmp[1]
}else{
alert('tmp is not set')
}

我认为您的tmp变量是空的,因为您的正则表达式无法匹配任何变量


此外,还应该在正则表达式参数中包含'g',表示类似//ig的意思。Bcoz您期待不止一场比赛。也可以通过检查长度是否真的等于或大于两个等来使用防御性程序。很明显,国家与你想象的不同。在循环之前注销它,您就可以解决它了。
document.body.outerHTML.match
-这是一种非常奇怪的方法,使用DOM从HTML获取文本数据。我更愿意说
tmp
null
。我希望HTML是专有的,而不是您编写的东西……插入行“console.Log(tmp);”在var tmp行之后,通过Javascript控制台中的浏览器查看tmp中的内容(查看浏览器菜单中的“开发人员工具”、“错误控制台”之类的内容)。很可能tmp不是数组或tmp[1]不存在。这不是答案,而是调试步骤。虽然这可以处理错误,但它并不能真正为问题/任务提供解决方案。好的,谢谢,我收到了警报。下一个问题是如何设置tmp?@Tom-如果
.match()
使用的正则表达式与html内容中的任何内容都不匹配,
tmp
变量将为
null
。你可以按照建议用
if(tmp)
来测试,但是如果没有匹配项,下一步就取决于你:这取决于你想做什么。@Tom。特别是在这种情况下:您不能100%确定浏览器的DOM表示与正则表达式模式匹配。您需要仔细阅读如何选择各个DOM元素。如果有任何方法可以修改HTML结构,例如,如果可以将所需的文本包装在一个span中(同时可以从1995年开始修复该标记),那么它就变得微不足道了。我认为OP不需要
g
标志-期望模式匹配一个字符串,但是子匹配项将组成数组元素。如果没有'g'参数,它将从返回单个元素数组的第一个匹配项退出。
var country
if( tmp ){
country = tmp[1]
}else{
alert('tmp is not set')
}