
本文介绍如何通过 javascript 正则表达式精准匹配并替换字符串中所有 `[...]` 包裹的文本,将其转换为 `...` 加粗 html 片段,并强调对动态内容进行 html 转义以防范 xss 风险。
在前端开发中,常需对动态生成的文本做轻量级格式化处理,例如将标记语法(如 [Term])渲染为加粗效果。核心思路是:用正则提取方括号内非]字符的内容,并替换为 HTML 加粗标签。
以下是一段简洁可靠的实现:
function boldBracketed(text) {
// 先对原始文本做基础 HTML 转义(防 XSS),再执行替换
const escapeHtml = (str) =>
str.replace(/[&<>"'`]/g, (char) => {
const escapeMap = { '&': '&', '<': 'zuojiankuohaophpcn', '>': 'youjiankuohaophpcn', '"': '"', "'": ''', '`': '`' };
return escapeMap[char];
});
const escaped = escapeHtml(text);
// 匹配 [任意非 ] 字符]+(支持连续多个 ] 的健壮写法,但通常单个 ] 即可)
return escaped.replace(/\[([^\]]+)\]/g, '$1');
}
// 示例使用
const input = '[Number] years of practice in accounting and financial administration. Showcased skills in [Area of Expertise]';
const output = boldBracketed(input);
console.log(output);
// → Number years of practice in accounting and financial administration. Showcased skills in Area of Expertise✅ 关键说明:
- 正则 /\\[([^\]]+)\\]/g 中:
- \\[ 和 \\] 分别匹配字面量 [ 和 ](需双反斜杠转义);
- ([^\]]+) 捕获一个或多个非右括号字符,确保不跨括号匹配;
- g 标志实现全局替换,处理所有匹配项。
- $1 表示第一个捕获组内容(即括号内文本),避免直接拼接用户输入导致 XSS。
- 务必先转义再替换:若原始字符串来自用户输入或外部 API,跳过 escapeHtml() 将导致
⚠️ 注意事项:
立即学习“前端免费学习笔记(深入)”;
- 该方案适用于纯文本到 HTML 片段的转换,不可直接插入 innerHTML 而不校验;更安全的做法是结合 textContent + span + CSS 类(如 ),或使用 DOMPurify.sanitize() 进一步净化。
- 若需支持嵌套括号(如 [A [B] C]),标准正则无法胜任,应改用状态机或专用解析器。
总结:一次正则替换即可完成基础加粗需求,但安全永远优先——动态内容必须转义,再格式化,最后谨慎注入 DOM。











