2014-12-05 37 views
0

我試圖開發一個函數,將[粗體] ... [/ bold]轉換爲<b> ... </b >對於我論壇。到目前爲止,當只有一組[bold] ... [/ bold]時,這種方式是完美的,但是,每當添加第二個時,正則表達式不會識別第一個[bold]的結尾,直到第二。在正則表達式中識別多組打開標記,正文和關閉標記

爲了說明這一點,如果我把 「[黑體]你好[/粗體],你怎麼樣[黑體]今天[/粗體]?」,我應該得到這樣的:

你好,如何你今天是

不過,我真的開始是這樣的:

你好[/粗體],你怎麼樣[黑體]今天

下面是我目前的功能:

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

回答

3

所有你需要用它來.*.*改爲非貪婪.*?

function formatBolds(str) { 
    output = output.replace(/(\[bold\])(.*?)(\[\/bold\])/g, "<b>$2</b>"); 
} 
  • 的問題是,它的貪婪和嘗試匹配儘可能多的字符,包括第一個[/bold]和以下[bold],直到最後一個[/bold]。該?使它非貪婪,並在最小長度匹配
+0

「貪婪」通常意味着正則表達式會盡量做出最左邊,最長的匹配。 – CoverosGene 2014-12-05 20:58:28

3

暫停匹配我覺得用一個非貪婪的比賽應該可以解決你的問題:

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