我的任务是使用javascript中的正则表达式在日志文件中查找一些信息。我找不到代码的问题。我一直在收到错误: 未捕获的TypeError:无法读取null的属性“1”
日志文件示例:
202.32.92.47 - - [01/Jun/1995:00:00:59 -0600] "GET /~scottp/publish.html" 200 271
ix-or7-27.ix.netcom.com - - [01/Jun/1995:00:02:51 -0600] "GET /~ladd/ostriches.html" 200 205908
ram0.huji.ac.il - - [01/Jun/1995:00:05:44 -0600] "GET /~scottp/publish.html" 200 271
使用以下代码我试图获取主机名称:
var hostName = /(.*)\s\-\s\-/g;
$(".file").change(function(){
var file = "log";
$.get(file,function(data){
var lines = data.split("\n");
var len = lines.length;
//var arrayOfDomains = [];
//var match = [];
for(i=0;i<3;i++){
$("#123").append("<p>"+hostName.exec(lines[i])[1]+"</p><br>");
}
});
});
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
<input type="file" name="file" class="file">
<script type="text/javascript" src="func.js"></script>
<div id="123"></div>
</body>
</html>
我认为我的正则表达式没有任何问题,因为我单独使用了一些行并且它工作正常。当使用循环遍历行数组中的行时,代码仅停止工作。
答案 0 :(得分:1)
这条线正在打破
$("#123").append("<p>"+hostName.exec(lines[i])[1]+"</p><br>");
因为你的正则表达式是全局的,所以.exec()有时会返回null
。
我发现这个问题应该可以帮助您解决问题。 RegExp.exec() returns NULL sporadically
从这个问题我建议就像在这个循环中移动hoseName正则表达式赋值一样简单:
$(".file").change(function(){
var file = "log";
$.get(file,function(data){
var hostName = /(.*)\s\-\s\-/g; //Placed here
var lines = data.split("\n");
var len = lines.length;
//var arrayOfDomains = [];
//var match = [];
for(i=0;i<3;i++){
$("#123").append("<p>"+hostName.exec(lines[i])[1]+"</p><br>");
}
});
});