如何获取正则规则:line前的内容以提取堆栈跟踪中的文件名与行号
实现方案
1. 匹配用正则表达式
根据.NET堆栈的固定格式,可根据需求选择以下两种正则:
- 提取完整路径+行号(例:
E:\SharedProjects\ExampleProjectAPI\Services\ReportRepository.cs:line 445):\S+\.cs:line \d+ - 提取仅文件名+行号(例:
ReportRepository.cs:line 445,符合你的需求):[^\\\/]+\.cs:line \d+
规则说明:
\S+:匹配所有非空白字符,完整覆盖路径中的合法字符[^\\\/]+:排除路径分隔符(Windows的\、Linux的/),自动截取路径最后一段的文件名\.cs:匹配C#代码文件后缀,避免误匹配其他位置的:line字符串:line:匹配堆栈固定的行号标识\d+:匹配1位及以上的行号数字
2. 前端高亮实现示例
因为你需要在HTML页面展示,以下是JavaScript处理逻辑:
// 原始堆栈文本 const rawStack = `Microsoft.Data.SqlClient.SqlException (0x80131904): ... 此处省略堆栈内容 ...:line 445`; // 匹配正则,加g全局标记匹配堆栈中所有行号位置 const reg = /[^\\\/]+\.cs:line \d+/g; // 给匹配到的内容套上自定义类的span标签 const renderHtml = rawStack.replace(reg, matchStr => { return `<span class="stack-highlight">${matchStr}</span>`; }); // 插入到页面容器中 document.getElementById('stack-container').innerHTML = renderHtml;
配套CSS样式可自定义高亮效果:
.stack-highlight { color: #d63384; font-weight: 600; background: #f8d7da; padding: 1px 3px; border-radius: 3px; }
3. 兼容说明
如果是在后端预处理堆栈内容,C#、Java、Python等主流编程语言的正则引擎都兼容上述规则,直接使用即可。
内容的提问来源于stack exchange,提问作者GettingStarted
相关产品推荐
相关产品推荐

