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

Capture two strings in multi-line error message

我已经为 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'
]

您可以使用以下正则表达式捕获组 </code> 和 <code> 以获得文件路径和行号。

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

Regex101 Demo

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

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

这是我最终使用的:

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