javascript - 使用 js regex 将简单的标记样式(如 **bold** 替换为 <b>bold</b>)

标签 javascript regex text

我正在尝试获取一大块纯文本并将其部分转换为 html 标记。我不需要一个完整的富编辑器,只需要这几个标签:

**bold**
__underline__
~~italics~~
--strike--
<<http://www.link.com>>

这是我尝试编写的方法,但我缺少正则表达式/js 似乎阻碍了它:

function toMarkup($this) {
    var text = $this.text();
    text = text.replace("\*\*(.*)\*\*", "<b>$1</b>");
    text = text.replace("__(.*)__", "<u>$1</u>");
    text = text.replace("~~(.*)~~", "<i>$1</i>");
    text = text.replace("--(.*)--", "<del>$1</del>");
    text = text.replace("<<(.*)>>", "<a href='$1'>Link</a>");
    $this.html(text);
}

关于为什么这些替换不起作用的任何明显错误?我刚刚意识到的另一个问题是,通过将此文本转换为 html,我正在取消转义任何其他可能是恶意的潜在标签。奖励是关于如何仅转义这些元素而不是其他任何内容的任何建议。

最佳答案

首先,它们只是字符串,而不是正则表达式。其次,你应该使用不贪婪的 .*.

此外,您可能希望使用 g 修饰符来匹配文本中的每一次出现。

function toMarkup($this) {
    var text = $this.text();
    text = text.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>");
    text = text.replace(/__(.*?)__/g, "<u>$1</u>");
    text = text.replace(/~~(.*?)~~/g, "<i>$1</i>");
    text = text.replace(/--(.*?)--/g, "<del>$1</del>");
    text = text.replace(/<<(.*?)>>/g, "<a href='$1'>Link</a>");
    $this.html(text);
}

关于javascript - 使用 js regex 将简单的标记样式(如 **bold** 替换为 <b>bold</b>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16947514/

相关文章:

javascript - 使用 javascript 删除 Json 行

javascript - Angular Universal Server Side Rendering 将返回更多根据请求呈现的 HTML

java - SafeString 的正则表达式

regex - 在范围内使用时,带正则表达式的 Google Sheets 自定义函数在交替行上失败

使用 for..in 访问 JavaScript 属性

javascript - 使用正则表达式删除以 Javascript 中的单词开头的行

css - 使用 CSS 截断长字符串 : feasible yet?

javascript - 如何使用 jQuery 删除两个元素之间的文本

python - 有没有办法围绕一个圆圈(或在圆圈内)旋转文本?

javascript - 如何将平方根添加到我的 JavaScript/HTML 计算器中?