识别正则表达式中的多组开始标记,正文和结束标记

时间:2014-12-05 20:41:30

标签: javascript regex

我试图开发一个将[bold] ... [/ bold]转换为< b> ...< / b>的函数。为我的论坛。到目前为止,当只有一组[粗体] ... [/ bold]时,这种方法非常有效,但是,每当添加第二个时,正则表达式都不会识别第一个[粗体]的结尾,直到第二

为了说明,如果我要放" [粗体]你好[/ bold],你今天[粗体] [/大胆]怎么样?",我应该得到这个:

您好,您今天如何

然而,我实际得到的是:

你好[/ bold],今天你如何[大胆]

以下是我目前的职能:

function formatBolds(str) {
    output = output.replace(/(\[bold\])(.*)(\[\/bold\])/g, "<b>$2</b>");
}

2 个答案:

答案 0 :(得分:3)

您只需将.*更改为非贪婪.*?

即可
function formatBolds(str) {
    output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>");
}
  • .*的问题在于它贪婪并尝试匹配尽可能多的字符,包括第一个[/bold][bold],直到最后[/bold]?使其非贪婪,并以最小长度匹配停止匹配

答案 1 :(得分:3)

我认为使用非贪婪的比赛可以解决您的问题:

(\[bold\])(.*?)(\[\/bold\])