所以我正在编写一个ASP.Net应用程序,它将轮询用于其他应用程序的日志数据库,并以易读的方式显示日志。我已经掌握了基本功能,但我希望" linkify" StackTrace中显示的URL,以便单击它们将打开相关文件。
at initialiseProducts (http://localhost:51940/POS/POS.js:520:22)
at Object.success (http://localhost:51940/POS/POS.js:67:17)
at i (http://localhost:51940/jquery-3.2.0.min.js:2:28017)
at Object.fireWith [as resolveWith] (http://localhost:51940/jquery-3.2.0.min.js:2:28783)
at A (http://localhost:51940/jquery-3.2.0.min.js:4:14017)
at XMLHttpRequest. (http://localhost:51940/jquery-3.2.0.min.js:4:16305)
在对StackOverflow进行一些拖网之后,我发现了一个可以检测到我的网址而没有问题的正则表达式
/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig
但是它也会匹配URL末尾的行号和列号:520:22
,这意味着当单击链接时,找不到该文件。
是否可以修改此Regex以忽略每个URL末尾的行号和列号?
答案 0 :(得分:0)
这是您的正则表达式的修改版本,您可以从捕获中排除行号和列号,如下所示:
(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*):\d+:\d+
现场演示here
第1组包含您的网址。
const regex = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*?):\d+:\d+/ig;
const str = `at initialiseProducts (http://localhost:51940/POS/POS.js:520:22)
at Object.success (http://localhost:51940/POS/POS.js:67:17)
at i (http://localhost:51940/jquery-3.2.0.min.js:2:28017)
at Object.fireWith [as resolveWith] (http://localhost:51940/jquery-3.2.0.min.js:2:28783)
at A (http://localhost:51940/jquery-3.2.0.min.js:4:14017)
at XMLHttpRequest. (http://localhost:51940/jquery-3.2.0.min.js:4:16305)`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}