2011-09-01 64 views
2

我有一个使用Web服务器在线提供的纯文本文件。这是一个日志格式如下:Javascript:逐行添加样式到文件

[00:24:48] <username> message text goes here 

我想拍一些JavaScript来格式化一行日志线和应用不同的样式时间戳,用户名和消息。如何逐行读取文本并应用css样式?

+3

为什么不使用Web服务器将其格式化为HTML格式并提供它?每次在客户端上使用脚本格式化它都不是一种非常有效的资源使用方式。 – RobG

+0

我希望将这个功能添加为浏览器扩展名或者userscript –

回答

3

Example

var line = "[00:24:48] <username> message text goes here"; 
// stamp 
line = line.replace(/(\[[0-9]{2}:[0-9]{2}:[0-9]{2}\])/, '<span class="stamp">$1</span>'); 
// username 
line = line.replace(/<([a-zA-Z]+)>/, '<span class="user">&lt;$1&gt;</span>'); 

$('#id').html('<div class="message">' + line + '</div>'); 

我会用jQuery for the ajax只是因为它是如此简单的实现:

$.ajax({ 
    type: 'GET', 
    url: '/log.txt', 
    success: function(lines) { 
     processLines(lines.split('\n')); 
    } 
}) 

function processLines(arrayOfLines) { 
    for (var i = 0; i < arrayOfLines.length; i++) { 
     var line = arrayOfLines[i]; //"[00:24:48] <username> message text goes here"; 
     // stamp 
     line = line.replace(/(\[[0-9]{2}:[0-9]{2}:[0-9]{2}\])/, '<span class="stamp">$1</span>'); 
     line = line.replace(/<([a-zA-Z]+)>/, '<span class="user">&lt;$1&gt;</span>'); 

     $('#id').html('<div class="message">' + line + '</div>'); 
    } 
}) 
+0

IAbstractDownvoteFactory,我如何将每行读入行变量? –

0

您可以使用正则表达式来生成一个HTML字符串:

var t = ' [00:24:48] username message text goes here '; 
var r = /(\[)([^\]]+)(\] +)(\S+)/g; 
var html = t.replace(r, '<span class="timestamp">$2<\/span>' + 
         '<span class="username">$4<\/span> <span class="message">') + 
         '<\/span><br>'; 

// <span class="timestamp">00:24:48</span><span class="username">username</span>' 
// <span class="message"> message text goes here </span><br> 

虽然您可能需要使用多行标志(m),具体取决于输入。