当前位置:首页 > JavaScript

js实现ubb

2026-02-01 07:10:03JavaScript

UBB标签转HTML的实现方法

使用JavaScript实现UBB到HTML的转换,核心是通过正则表达式匹配UBB标签并替换为对应的HTML标签。以下是常见UBB标签的转换方法:

function ubbToHtml(ubbStr) {
    // 基本标签转换
    let html = ubbStr.replace(/\[b\](.*?)\[\/b\]/g, '<strong>$1</strong>');
    html = html.replace(/\[i\](.*?)\[\/i\]/g, '<em>$1</em>');
    html = html.replace(/\[u\](.*?)\[\/u\]/g, '<u>$1</u>');

    // 链接处理
    html = html.replace(/\[url=(.*?)\](.*?)\[\/url\]/g, '<a href="$1" target="_blank">$2</a>');
    html = html.replace(/\[url\](.*?)\[\/url\]/g, '<a href="$1" target="_blank">$1</a>');

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

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

    // 换行处理
    html = html.replace(/\n/g, '<br>');

    return html;
}

安全过滤的实现

在转换UBB时需要考虑XSS安全防护,应对输入内容进行过滤:

function safeFilter(html) {
    return html.replace(/<script.*?>.*?<\/script>/gi, '')
               .replace(/javascript:/gi, '')
               .replace(/onerror/gi, '')
               .replace(/onload/gi, '');
}

复杂标签的扩展处理

对于更复杂的UBB标签如表格、列表等,需要更细致的处理:

// 表格处理
function handleTable(ubbStr) {
    return ubbStr.replace(/\[table\](.*?)\[\/table\]/gs, function(match, content) {
        const rows = content.split('[tr]');
        let tableHtml = '<table>';

        rows.forEach(row => {
            if(!row) return;
            tableHtml += '<tr>';
            const cells = row.split('[td]');
            cells.forEach(cell => {
                if(!cell) return;
                tableHtml += `<td>${cell.replace(/\[\/td\]/g, '')}</td>`;
            });
            tableHtml += '</tr>';
        });

        return tableHtml + '</table>';
    });
}

实际应用示例

将上述方法组合使用:

js实现ubb

const ubbText = '[b]加粗文本[/b] [url=https://example.com]链接[/url]';
const safeHtml = safeFilter(ubbToHtml(ubbText));
console.log(safeHtml);
// 输出: <strong>加粗文本</strong> <a href="https://example.com" target="_blank">链接</a>

注意事项

正则表达式中的.*?使用非贪婪模式匹配,避免跨标签匹配问题 处理用户输入时务必先进行安全过滤 复杂UBB标签可能需要递归处理或多步转换 考虑添加对未闭合标签的容错处理

标签: jsubb
分享给朋友:

相关文章

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现隐藏div

js实现隐藏div

隐藏div的几种方法 使用JavaScript隐藏div元素可以通过多种方式实现,以下是几种常见的方法: 方法一:修改style.display属性 将div的display属性设置为"none"…