2012-01-04 4 views
0

私は、HTMLへの変換を行うための正規表現を使用して、単純なJavaScriptベースのWYSIWYGエディタを作成しています。Javascript Regex各インスタンスをフォーマットしない

これは、それは大胆に** 2で囲まれたテキストに変換し、私は

message = message.replace(/\*\*(.*)\*\*/g, "<b>$1</b>"); 

を使用していますjavascriptの変換方法です。 問題はすべてのインスタンスでそうしないということです。 代わりに**の最初のインスタンスから最後のインスタンスになります。

ので**bold text** **bold text**

は私に

太字**太字

<b>bold text* *bold text</b> 

代わりの

<b>bold text</b> <b>bold text</b> 

どのようにすることができますを提供しますそれらを一緒にグループ化するのではなく、それぞれのインスタンスを変換するように設定しますか?

+0

これを試してみてください: 'メッセージは= message.replace(/ \ * \ *(。*?)\ * \ */g、 "$ 1"); ' – lfxgroove

答えて

2

は、あなたはそれが貪欲でないにするために.*?に数量詞を変更する必要があります。

message = message.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>"); 
//        ^
2

あなたの現在の正規表現は一種のいいですし、以来、あなたの最初の2つの星の後に任意の文字をキャプチャ*維持する正規表現は何も一致します。あなたが最後に見つけた**を見つけるまで、あなたのデータを食べること。これは最後にあります。それがあなたが持っている結果を得る理由です。

message = message.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>"); 

これを少し:

とそれを交換してみてください?それは2つの星の最初の発生で停止することを意味する正規表現を非貪欲にします。問題は、あなたの(.*)はすべてをキャプチャしていることである

message = message.replace(/\*\*([A-Za-z0-9_- ]+)\*\*/g, "<b>$1</b>"); 
1

:よう それとも、何かを行うことができます。これはあなたの問題を解決する必要があります。

\*\*([^\*]+)\*\* 

をこれに伴う問題は、しかし、それはこれを一致することである。**fjffj**ではなく、この:**ffff*gggg**

関連する問題