使用js正则表达式将简单标记样式(如**bold**)替换为<b>粗体</ b>

ant*_*lma 5 javascript regex text

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

**bold**
__underline__
~~italics~~
--strike--
<<http://www.link.com>>
Run Code Online (Sandbox Code Playgroud)

这是我试图写的方法,但我缺乏正则表达式/ 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);
}
Run Code Online (Sandbox Code Playgroud)

关于为什么这些替换不起作用的任何明显错误?我刚刚意识到的另一个问题是将此文本转换为html我无法使用任何其他可能是恶意的潜在标签.如果只是逃避这些元素而不是其他任何建议,奖励就是任何建议.

n1x*_*xx1 7

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

此外,您可能希望使用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);
}
Run Code Online (Sandbox Code Playgroud)