CodeMirror是一款功能强大的在线代码编辑器,广泛应用于各种Web开发场景。本文将详细介绍如何利用正则表达式在CodeMirror中实现日志字段的高亮显示,帮助开发者快速定位关键信息。
1. 引入CodeMirror库文件
<link rel="stylesheet" href="codemirror.css">
<script src="codemirror.js"></script>
2. 创建编辑器实例
var editor = CodeMirror.fromTextArea(document.getElementById("logArea"), {
lineNumbers: true,
mode: "text/plain"
});
1. 定义高亮样式
.cm-error { color: #f00; }
.cm-warning { color: #ff9900; }
.cm-info { color: #00f; }
2. 创建自定义模式
CodeMirror.defineMode("log", function() {
return {
token: function(stream) {
if (stream.match(/\[ERROR\]/)) return "error";
if (stream.match(/\[WARN\]/)) return "warning";
if (stream.match(/\[INFO\]/)) return "info";
if (stream.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)) return "date";
stream.next();
return null;
}
};
});
1. 更新编辑器配置
editor.setOption("mode", "log");
1. 动态更新高亮规则
function updateHighlightRules(rules) {
CodeMirror.defineMode("dynamicLog", function() {
return {
token: function(stream) {
for (var i = 0; i < rules.length; i++) {
if (stream.match(rules[i].regex)) {
return rules[i].style;
}
}
stream.next();
return null;
}
};
});
editor.setOption("mode", "dynamicLog");
}
2. 处理多行日志
token: function(stream, state) {
if (stream.sol() && stream.match(/\[ERROR\]/)) {
state.errorMode = true;
return "error";
}
if (state.errorMode) {
if (stream.sol()) state.errorMode = false;
else return "error";
}
// 其他规则...
}
1. 避免过于复杂的正则表达式
2. 对大日志文件使用分批加载
3. 考虑使用Web Worker处理高亮
通过以上方法,您可以轻松实现日志文件的高亮显示,帮助开发团队快速定位问题。CodeMirror的灵活性使其成为处理日志显示的理想选择。