导读:本期聚焦于小伙伴创作的《如何利用 JavaScript 实现一个支持语法高亮的代码编辑器?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何利用 JavaScript 实现一个支持语法高亮的代码编辑器?》有用,将其分享出去将是对创作者最好的鼓励。

实现支持语法高亮的代码编辑器,核心思路是通过可编辑区域接收用户输入,再结合正则匹配识别不同语法元素,最后用不同样式渲染对应内容。整个过程不需要依赖第三方库,仅用原生JavaScript就能完成基础功能。

如何利用 JavaScript 实现一个支持语法高亮的代码编辑器?

核心实现原理

语法高亮代码编辑器的实现主要分为三个部分:

  • 搭建可输入的编辑区域,用于接收用户的代码输入
  • 定义不同语法元素的正则匹配规则,比如关键字、字符串、注释等
  • 将输入的代码按规则拆分,给不同元素添加对应的样式类,再渲染到页面上

基础结构搭建

首先我们需要创建编辑器的整体结构,包含一个用于输入的原生文本区域和一个用于展示高亮效果的容器,两者位置重叠,输入区域在上层但设置为透明,这样用户看到的就是高亮后的效果。

<div class="editor-container">
  <div class="highlight-area"></div>
  <textarea class="input-area" spellcheck="false"></textarea>
</div>

对应的基础样式如下,让两个区域重叠,输入区域在上层且背景透明:

.editor-container {
  position: relative;
  width: 800px;
  height: 400px;
  border: 1px solid #ccc;
  font-family: 'Consolas', monospace;
  font-size: 14px;
  line-height: 1.5;
}

.highlight-area {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  padding: 10px;
  box-sizing: border-box;
  white-space: pre-wrap;
  word-wrap: break-word;
  overflow-y: auto;
  z-index: 1;
}

.input-area {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  padding: 10px;
  box-sizing: border-box;
  border: none;
  outline: none;
  background: transparent;
  color: transparent;
  caret-color: #000;
  resize: none;
  white-space: pre-wrap;
  word-wrap: break-word;
  z-index: 2;
}

语法规则定义

我们需要定义不同语法元素的正则规则,这里以JavaScript语法为例,定义关键字、字符串、数字、单行注释、多行注释的匹配规则:

// 定义语法规则,每个规则包含匹配正则和对应的样式类
const syntaxRules = [
  // 单行注释
  { regex: ///.*$/gm, className: 'comment' },
  // 多行注释
  { regex: //*[sS]*?*//g, className: 'comment' },
  // 字符串 双引号
  { regex: /"[^"\]*(?:\.[^"\]*)*"/g, className: 'string' },
  // 字符串 单引号
  { regex: /'[^'\]*(?:\.[^'\]*)*'/g, className: 'string' },
  // 模板字符串
  { regex: /`[^`\]*(?:\.[^`\]*)*`/g, className: 'string' },
  // 数字
  { regex: /bd+(.d+)?b/g, className: 'number' },
  // JavaScript关键字
  { regex: /b(const|let|var|function|if|else|for|while|return|class|new|this|import|export|from|async|await)b/g, className: 'keyword' }
];

对应的高亮样式可以这样定义:

.keyword {
  color: #c678dd;
  font-weight: bold;
}

.string {
  color: #98c379;
}

.number {
  color: #d19a66;
}

.comment {
  color: #5c6370;
  font-style: italic;
}

高亮渲染逻辑实现

核心的高亮处理函数需要接收输入的代码文本,遍历所有语法规则,将匹配到的内容替换为带样式类的span标签,最后把处理后的内容放到高亮展示区域。

/**
 * 处理代码文本,生成带高亮样式的HTML
 * @param {string} code - 输入的代码文本
 * @returns {string} 带高亮样式的HTML字符串
 */
function highlightCode(code) {
  // 先对代码中的特殊字符进行转义,避免HTML解析错误
  let processedCode = code
    .replace(/&/g, '&')
    .replace(/</g, '<')
    .replace(/>/g, '>');

  // 遍历所有语法规则,替换匹配的内容
  syntaxRules.forEach(rule => {
    processedCode = processedCode.replace(rule.regex, match => {
      return `<span class="${rule.className}">${match}</span>`;
    });
  });

  return processedCode;
}

绑定输入事件

最后需要给输入区域绑定input事件,当用户输入内容时,实时调用高亮处理函数,更新高亮展示区域的内容:

// 获取DOM元素
const inputArea = document.querySelector('.input-area');
const highlightArea = document.querySelector('.highlight-area');

// 绑定输入事件
inputArea.addEventListener('input', () => {
  const code = inputArea.value;
  const highlighted = highlightCode(code);
  highlightArea.innerHTML = highlighted;
});

// 初始加载时如果有默认内容,也进行高亮处理
inputArea.dispatchEvent(new Event('input'));

功能优化建议

上述实现是基础版本,还可以做以下优化:

  • 添加行号显示功能,在编辑器左侧增加行号区域,随内容滚动同步更新
  • 处理输入区域的滚动同步,让输入区域和高亮区域的滚动位置保持一致
  • 扩展语法规则,支持更多语言或者更多语法元素的高亮
  • 添加Tab键缩进功能,提升编辑体验
注意:如果需要在代码中使用<a>标签,只能在
代码块内部使用,正文其他位置不允许出现可点击的链接标签。

JavaScript代码编辑器语法高亮正则匹配修改时间:2026-07-10 23:48:39

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。