2013-11-25 130 views
0

我在C#中使用了正則表達式。如何在Javasript中使用這種類型的正則表達式。這種類型的正則表達式在C#中工作。正則表達式JavaScript。用當前正則表達式解析日誌文件

我有以下的正則表達式:

(?<Month>[A-Za-z]{3}) (?<Date>[0-9]{2}) (?<Hour>[0-9]{2}):(?<Minutes>[0-9]{2}):(?<Seconds>[0-9]{2}) (?<ComputerName>[A-Za-z0-9\-\ ]+): (?<KernalTime>[0-9\.\[\]\ ]+) (?<Message>[A-Za-z\(\)\.\ ]+) 

解析以下行(所有的線條都類似):在javascript中我用下面的代碼

Nov 24 14:24:31 Dell-Inspiron-N5110 kernel: [ 0.000000] Intel GenuineIntel 

matchRegexParse: function() { 



    var myString = "Nov 24 14:24:31 Dell-Inspiron-N5110 kernel: [ 0.000000] Intel GenuineIntel"; 
    var myRegexp = new RegExp(
     "(?<Month>[A-Za-z]{3}) (?<Date>[0-9]{2}) (?<Hour>[0-9]{2}):(?<Minutes>[0-9]{2}):(?<Seconds>[0-9]{2}) (?<ComputerName>[A-Za-z0-9\-\ ]+): (?<KernalTime>[0-9\.\[\]\ ]+) (?<Message>[A-Za-z0-9\(\)\.\ \-\:]+)", 
     "gi"); 

    var match = myRegexp.exec(myString); 
    alert(match); 
}, 

我收到以下錯誤(見附件圖片):

enter image description here

EDIT(錯誤文本):

Uncaught SyntaxError: Invalid regular expression: /(?<Month>[A-Za-z]{3}) (?<Date>[0-9]{2}) (?<Hour>[0-9]{2}):(?<Minutes>[0-9]{2}):(?<Seconds>[0-9]{2}) (?<ComputerName>[A-Za-z0-9\-\ ]+): (?<KernalTime>[0-9.\[\]\ ]+) (?<Message>[A-Za-z0-9\(\)\.\ \-\:]+)/ : Invalid group

+0

首先你應該使用正則表達式來避免轉義(你忘記了)。見https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions –

+0

@ p.s.w.g見我編輯 –

回答

2

據我所知JavaScript不支持命名組:

Named capturing groups in JavaScript regex?

您可以轉換爲數字索引組通過移除<Angle-Bracket-Parts>

var re = /([A-Za-z]{3}) ([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) ([A-Za-z0-9\-\ ]+): ([0-9\.\[\]\ ]+) ([A-Za-z0-9\(\)\.\ \-\:]+)/gi 

這將意味着,你只能通過數字偏移訪問捕獲的信息:

var match = re.exec(myString); 
console.log(match[1]) // Nov 24 

或使用例如:

http://xregexp.com/

+0

謝謝,這有助於 –