我的任务是使用 JavaScript 中的正则表达式在日志文件中查找一些信息。我找不到我的代码的问题。我不断收到错误: 未捕获的类型错误:无法读取 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>
我认为我的正则表达式没有任何问题,因为我单独使用了一些行,并且效果很好。仅当使用循环遍历行数组中的行时,代码才会停止工作。
最佳答案
它正在突破这条线
$("#123").append("<p>"+hostName.exec(lines[i])[1]+"</p><br>");
因为 .exec() 有时返回 null
由于您的正则表达式是全局的。
我发现这个问题应该可以帮助你解决你的问题。 RegExp.exec() returns NULL sporadically
根据这个问题,我建议它就像在循环内移动hooseName正则表达式分配一样简单,如下所示:
$(".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>");
}
});
});
关于javascript - javascript中使用正则表达式获取日志信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42563296/