我试图开发一个将[bold] ... [/ bold]转换为< b> ...< / b>的函数。为我的论坛。到目前为止,当只有一组[粗体] ... [/ bold]时,这种方法非常有效,但是,每当添加第二个时,正则表达式都不会识别第一个[粗体]的结尾,直到第二
为了说明,如果我要放" [粗体]你好[/ bold],你今天[粗体] [/大胆]怎么样?",我应该得到这个:
您好,您今天如何?
然而,我实际得到的是:
你好[/ bold],今天你如何[大胆] ?
以下是我目前的职能:
function formatBolds(str) {
output = output.replace(/(\[bold\])(.*)(\[\/bold\])/g, "<b>$2</b>");
}
答案 0 :(得分:3)
您只需将.*
更改为非贪婪.*?
function formatBolds(str) {
output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>");
}
.*
的问题在于它贪婪并尝试匹配尽可能多的字符,包括第一个[/bold]
和[bold]
,直到最后[/bold]
。 ?
使其非贪婪,并以最小长度匹配停止匹配答案 1 :(得分:3)
我认为使用非贪婪的比赛可以解决您的问题:
(\[bold\])(.*?)(\[\/bold\])