2013-07-15 44 views
0

我想下面的PHP正則表達式轉換成JavaScript:將PHP BBCode REGEX轉換爲JavaScript,有人可以幫助查明問題嗎?

$article_f = preg_replace('#\[b\](.+)\[\/b\]#iUs', '<b>$1</b>', $article_text); 

我想出了以下JavaScript:

article_f = article_f .replace(/\[b\](.+)\[\/b\]/gi, '<b>$1</b>'); 

出於某種原因,這是允許的比賽去,如果它忽略與其他匹配在同一行上,它實際上將它們組合成一個大匹配,例如:

[b] this is bold[/b] and [b] this is too [/b] 

將被替換爲

<b> this is bold[/b] and [b] this is too </b> 

任何想法之一如何解決這一問題將不勝感激。

回答

2

利用這種模式來代替:

/\[b\](.+?)\[\/b\]/gi 

的問題是,+量詞是貪婪(默認行爲),因此.+捕獲所有他能(即:this is bold[/b] and [b] this is too)。如果添加一個問號,量詞變得不確定(=懶惰),並停在第一個關閉bbcode標籤處。

在php模式中,您可以在末尾看到U修飾符,它將所有貪婪量詞切換爲懶惰且所有懶惰量詞都貪婪。這就是爲什麼.+在php模式下是懶惰的(默認行爲是反轉的)。

你也可以注意到php模式中的s修飾符。 s代表單行。這意味着該點也可以匹配換行符。但Javascript沒有相同的。 要使用Javascript,您必須替換[\s\S],否則.+將在第一個換行符處停止匹配。

「完美」 翻譯php的模式是:

/\[b\]([\s\S]+?)\[\/b\]/gi 
+0

絕對完美的,謝謝! –

相關問題