2013-06-02 73 views
0

我想下面的行拆分为一个数组中的Javascript:正则表达式分割线在JavaScript

Jun 02 16:45:04 [steveh] [info] test1 
Jun 02 16:45:12 [steveh] [info] test2 
Jun 02 16:45:12 [steveh] [info] test3 
test 3.1 
test 3.2 
Jun 02 16:45:16 [steveh] [info] test4 

我能做到这一点有:

var arr = data.split(/\r?\n/); 

它得到我说:

[ 
    "Jun 02 16:45:04 [steveh] [info] test1", 
    "Jun 02 16:45:12 [steveh] [info] test2", 
    "Jun 02 16:45:12 [steveh] [info] test3", 
    "test 3.1", 
    "test 3.2", 
    "Jun 02 16:45:16 [steveh] [info] test4" 
] 

到目前为止好,但问题是,我不想在该数组中的6个项目,我只想要4这样的事情:

[ 
    "Jun 02 16:45:04 [steveh] [info] test1", 
    "Jun 02 16:45:12 [steveh] [info] test2", 
    "Jun 02 16:45:12 [steveh] [info] test3 
    test 3.1 
    test 3.2", 
    "Jun 02 16:45:16 [steveh] [info] test4" 
] 

我打周围的一些时间与JS .match().split()功能,但无法弄清楚。

这里是jsbin:http://jsbin.com/icufef/1/edit

+0

你从哪里得到这些数据? – Blender

+0

实际上来自一个给服务器记录回来的web服务。我想过滤该日志中的JavaScript,因此我需要一个数组。但是为了测试,你可以像处理多行字符串一样处理它。 – MrAsk

+0

如果你知道你想得到的确切格式,你可以尝试一个正则表达式来匹配那个字符串,而不是分割。 [**在线演示**](http://regex101.com/r/mH7qW0) – HamZa

回答

1

使用下面的RE在分割:

/\r?\n(?=[^\n]*\[info\])/ 

拆分对换行仅在以下行包含​​。

0

你必须寻找新行之后一个月的短名称,所以它会像\r?\n(Jan|Feb|March|Apri...|Dec)作为一个分裂的说法。你需要知道你的数据如何提供这些月份名称,而不是“测试”不是“可能”来捕捉它的可能。

编辑: 噢,泽维尔是正确的:不是馈入分裂,你应该标记这些条目为真正的换行:

data.replace('/^(Jan|Feb...) /', 'BREAKME$1'); 
data.split('/\r?\nBREAKME'); 
+0

但是,不会从输出中删除月份名称吗? –

+0

你需要在该组中添加一个前瞻:)之后,我认为它就像OP想要的那样工作。 – Jerry

+0

是的,它确实... :( – MrAsk

0

,除非你了解一下你不能做到这一点,一般你的日期格式......好吧,我想如果你跳过日期并且基于[steveh] [info]对,你可能会找到一个解决方案。但是什么test 3.1等?那里可能有哪些数据?有括号的文字吗?会有日期吗?如果不知道这些数据是如何构建的,你愿意去多远?以确保这一点得到了理解。

总是有可能想出解决方案,它大部分是正确的解析,但错过了一些场景。

根据数据的不同,这些情况可能会导致数据无法正确解析,也就是说,如果记录器记录的行还包含看起来像新的日志行的行,请说“foo \ nJun 02 16 :47:16 [steveh] [info] test4“,并且该字符串中给出的日期恰好是在连续日志之间发生的日期,所以不可能通过仅查看记录数据。

+0

我同意它不可能没有错误的可能性。人们必须忍受那种冒险。如果日志格式可以“调整”(可配置),则可以尝试在日志格式中找到一个好的开始标志。 – flaschenpost

+0

那么,如果Web服务本身(即OP提到的)使用某种约定来定义日志文件并为其定界,那么就没有必要讨论这个问题 - 除非可能造成的错误是无法容忍的。相反,任何想要使用这个webservice的人都必须制作他们自己糟糕的解析器,然后,*如果记录器改变格式*,那么每个使用该服务的人都必须修复他们的解析器。我可以看到有人可能想用web服务公开原始日志文件的正当理由,但互操作性不在其中。 – JayC

+1

我只是想知道,每当我看到这样的问题时,如果通过帮助,我只是帮助修补一艘本应该已经沉没的船,并且每艘船都已经沉没了,所有人都会过得更好。 – JayC