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

Javascript 识别正则表达式中的多组开始标记、正文和结束标记,javascript,regex,Javascript,Regex,我正在尝试开发一个函数,将[bold]…[/bold]转换为。。。为我的论坛。到目前为止,当只有一组[bold]…[/bold]时,这种方法非常有效,但是,每当添加第二组[bold]时,正则表达式直到第二组[bold]才识别第一个[bold]的结尾 举例来说,如果我把“[bold]你好[/bold],你[bold]今天好吗[/bold]?”,我应该得到: 你好,今天好吗 然而,我实际上得到的是: 你好,今天好吗 以下是我目前的职能: function formatBolds(str) {

我正在尝试开发一个函数,将[bold]…[/bold]转换为。。。为我的论坛。到目前为止,当只有一组[bold]…[/bold]时,这种方法非常有效,但是,每当添加第二组[bold]时,正则表达式直到第二组[bold]才识别第一个[bold]的结尾

举例来说,如果我把“[bold]你好[/bold],你[bold]今天好吗[/bold]?”,我应该得到:

你好,今天好吗

然而,我实际上得到的是:

你好,今天好吗

以下是我目前的职能:

function formatBolds(str) {
    output = output.replace(/(\[bold\])(.*)(\[\/bold\])/g, "<b>$2</b>");
}
函数格式bolds(str){
输出=输出。替换(/(\[bold\])(.*)(\[\/bold\])/g,“$2”);
}

*
更改为非贪婪
*?

function formatBolds(str) {
    output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>");
}
函数格式bolds(str){
输出=输出。替换(/(\[bold\])(.*)(\[\/bold\])/g,“$2”);
}
  • *
    的问题在于它贪婪,试图匹配尽可能多的字符,包括第一个
    [/bold]
    和后面的
    [bold]
    直到最后一个
    [/bold]
    使其非贪婪,并在最小长度匹配处停止匹配

*
更改为非贪婪
*?

function formatBolds(str) {
    output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>");
}
函数格式bolds(str){
输出=输出。替换(/(\[bold\])(.*)(\[\/bold\])/g,“$2”);
}
  • *
    的问题在于它贪婪,试图匹配尽可能多的字符,包括第一个
    [/bold]
    和后面的
    [bold]
    直到最后一个
    [/bold]
    使其非贪婪,并在最小长度匹配处停止匹配

我认为使用非贪婪匹配应该可以解决您的问题:

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

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

(\[bold\])(.*?)(\[\/bold\])
“贪婪”通常意味着正则表达式将尝试进行最左边、最长的匹配。“贪婪”通常意味着正则表达式将尝试进行最左边、最长的匹配。