【发布时间】:2017-08-20 09:46:54
【问题描述】:
我有一个从基于 javascript 的节点应用程序的输出到 stderr 的日志文件。 (到 txt 文件的输出是来自一个名为“logfile-grunt”的 grunt 插件)
javascript 程序的其他部分正在控制台输出上生成“进度条”。
在控制台输出中,进度条只是一个不断更新的单行,但在日志文件中,进度条的每个状态都记录在日志文件中,由我认为是 ANSI 转义码的某种特殊字符包围:@每行开头的 987654321@ 和 ESC[0K,其中 'ESC' 是单个符号。
我想使用正则表达式检查日志文件并匹配进度条中的所有内容,包括转义码并将其删除。
与此匹配的 javascript 正则表达式是什么?
以纯文本形式显示在日志文件中的示例输出:
uploading images
NUMBER OF IMAGE FILES: 406
ESC[1G[--------------------------------------------------] 1/406ESC[0K
ESC[1G[=-------------------------------------------------] 2/406ESC[0K
ESC[1G[==------------------------------------------------] 3/406ESC[0K
ESC[1G[===-----------------------------------------------] 4/406ESC[0K
ESC[1G[====----------------------------------------------] 5/406ESC[0K
-----------------------------------------------
>> Task completed, blah blah
使用基于正则表达式的查找和替换工具后,我希望文件看起来像:
uploading images
NUMBER OF IMAGE FILES: 406
-----------------------------------------------
>> Task completed, blah blah
它只是将进度条行与我需要匹配的特殊控制字符匹配的正则表达式
编辑 显示带有行号的输出示例:
1 uploading images
2 NUMBER OF IMAGE FILES: 406
3 ESC[1G[--------------------------------------------------] 1/406ESC[0K
ESC[1G[=-------------------------------------------------] 2/406ESC[0K
ESC[1G[==------------------------------------------------] 3/406ESC[0K
ESC[1G[===-----------------------------------------------] 4/406ESC[0K
ESC[1G[====----------------------------------------------] 5/406ESC[0K
4 -----------------------------------------------
5 >> Task completed, blah blah
【问题讨论】:
-
/\x1b[1G(.*)\x1b[0K/g 似乎正在选择我需要的东西。 \x1b 选择 ANSI 转义字符,[ 选择方括号,后跟 1G 字面选择 .... 然后任何带有 (.*) 的内容,直到用 \x1b[0K 选择 ESC[0K。由于日志文件的一些部分包含此文本,因此我想删除正则表达式以 /g 结尾,以表明我想要的不仅仅是第一个匹配项。
-
您可能还想在末尾包含一个 '\n' 以删除换行符(取决于您的替换作品)
标签: javascript regex special-characters