当前位置:首页 > JavaScript

js实现ubb

2026-03-14 05:37:33JavaScript

UBB 标签的基本概念

UBB(Universal Bulletin Board)是一种基于文本的标记语言,常用于论坛和社区中。它允许用户通过简单的标签实现文本格式化,如加粗、斜体、链接等。UBB 标签通常由方括号 [] 包围,例如 [b]加粗文本[/b]

实现 UBB 解析的核心思路

UBB 解析的核心是将 UBB 标签转换为对应的 HTML 标签。可以通过正则表达式匹配 UBB 标签,并将其替换为 HTML 标签。以下是常见的 UBB 标签及其对应的 HTML 实现方式:

常见 UBB 标签的解析方法

加粗标签 [b]

text = text.replace(/\[b\](.*?)\[\/b\]/g, '<strong>$1</strong>');

斜体标签 [i]

text = text.replace(/\[i\](.*?)\[\/i\]/g, '<em>$1</em>');

下划线标签 [u]

text = text.replace(/\[u\](.*?)\[\/u\]/g, '<u>$1</u>');

链接标签 [url]

js实现ubb

// 带 URL 的链接
text = text.replace(/\[url=(.*?)\](.*?)\[\/url\]/g, '<a href="$1">$2</a>');
// 不带 URL 的链接
text = text.replace(/\[url\](.*?)\[\/url\]/g, '<a href="$1">$1</a>');

图片标签 [img]

text = text.replace(/\[img\](.*?)\[\/img\]/g, '<img src="$1" alt="图片" />');

颜色标签 [color]

text = text.replace(/\[color=(.*?)\](.*?)\[\/color\]/g, '<span style="color:$1">$2</span>');

完整 UBB 解析函数示例

以下是一个完整的 UBB 解析函数,支持常见的 UBB 标签:

js实现ubb

function parseUBB(text) {
    // 加粗
    text = text.replace(/\[b\](.*?)\[\/b\]/g, '<strong>$1</strong>');
    // 斜体
    text = text.replace(/\[i\](.*?)\[\/i\]/g, '<em>$1</em>');
    // 下划线
    text = text.replace(/\[u\](.*?)\[\/u\]/g, '<u>$1</u>');
    // 链接(带 URL)
    text = text.replace(/\[url=(.*?)\](.*?)\[\/url\]/g, '<a href="$1">$2</a>');
    // 链接(不带 URL)
    text = text.replace(/\[url\](.*?)\[\/url\]/g, '<a href="$1">$1</a>');
    // 图片
    text = text.replace(/\[img\](.*?)\[\/img\]/g, '<img src="$1" alt="图片" />');
    // 颜色
    text = text.replace(/\[color=(.*?)\](.*?)\[\/color\]/g, '<span style="color:$1">$2</span>');
    // 换行(UBB 通常用 \n,HTML 用 <br>)
    text = text.replace(/\n/g, '<br>');
    return text;
}

安全性注意事项

直接解析 UBB 并插入 HTML 可能存在 XSS(跨站脚本攻击)风险。为了避免安全问题,建议对输入的文本进行转义处理:

function escapeUBB(text) {
    return text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

// 使用方式
const safeText = escapeUBB(originalText);
const html = parseUBB(safeText);

扩展 UBB 功能

如果需要支持更多 UBB 标签(如表格、列表等),可以扩展正则表达式规则。例如:

列表标签 [list]

text = text.replace(/\[list\](.*?)\[\/list\]/g, '<ul>$1</ul>');
text = text.replace(/\[\*\](.*?)(\n|$)/g, '<li>$1</li>');

引用标签 [quote]

text = text.replace(/\[quote\](.*?)\[\/quote\]/g, '<blockquote>$1</blockquote>');

测试示例

const ubbText = '[b]加粗文本[/b] [i]斜体文本[/i] [url=https://example.com]链接[/url]';
const htmlText = parseUBB(ubbText);
console.log(htmlText);
// 输出: <strong>加粗文本</strong> <em>斜体文本</em> <a href="https://example.com">链接</a>

通过以上方法,可以实现基本的 UBB 解析功能,并根据需求扩展更多标签支持。

标签: jsubb
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…