在多行错误消息中捕获两个字符串

时间:2016-03-14 21:59:26

标签: javascript regex javascript-objects atom-editor

我已经为AtomBuilder创建了一个构建包,我想扩展它以捕获发生错误的文件路径和行号。我无法为此找到有效的RegEx模式。

以下是错误消息的常见内容:

Processing script file: "/Users/johndoe/Projects/test.nsi" (UTF8)
Invalid command: Foo
Error in script "/Users/johndoe/Projects/test.nsi" on line 5 -- aborting creation process

我真的只是在最后一行之后,因为之前的行数可能会有所不同,具体取决于错误。我需要捕获引号和行号的数字之间的文件路径(Windows和Unix)。

以下是我的尝试:

errorMatch: [
  '((.|\\n)*)Error in script "(?<file>[^"]+) on line (?<line>\\d+) -- aborting creation process'
]

3 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式捕获组\1\2以获取文件路径和行号。

正则表达式: Error.*"(.*)".*(\d+)

Regex101 Demo

答案 1 :(得分:0)

尝试使用捕获组来匹配您需要的部分

var regex = /Error in script "(.*)" on line (\d+)/;

var match = message.match(regex);

if (match && match.length) {
  var filepath = match[1];
  var linenumber = match[2];

  console.log(filepath); // /Users/johndoe/Projects/test.nsi
  console.log(linenumber); //  5
}

JSFiddle演示:https://jsfiddle.net/moogs/zuodcsL7/

Regex101演示:https://regex101.com/r/wU0aH4/1

答案 2 :(得分:0)

这是我最终使用的内容:

const errorMatch = [
    '\\n(?<message>.+)\\nError in script "(?<file>[^"]+)" on line (?<line>\\d+) -- aborting creation process'
];