2011-12-20 5 views
7

私が取り組んでいるアプリケーションでは、プレーンテキストでコンテンツを入力し、後でHTMLとして表示します。以下のようにうまくできる限りユーザのコンテンツの表示を行うために、我々はコンテンツを変換:二つ以上の改行文字で区切られたテキストの新しい行を段落/ br HTMLタグに変換すると、これを1つの正規表現にすることはできますか?

  • 任意のブロックが<P>タグに包まれています。新しい行の文字(およびその間の空白)は削除されます。

  • 任意の改行文字(周囲の空白と一緒に)は、< br/>タグで置き換えられます。

私は現在、2つの正規表現の置換によるテキストを置くことによってこれを実現していますが、それはおそらく一つに統合することができればと思いまして。ここに私が今持っているもの(JavaScript):

// content holds the text to process 
content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>') 
       .replace(/\n/g, '<br />') + '</p>'; 
+0

好奇心が強い、TinyMCEやYUIのようなhtml/javascriptエディタを使用していますか?または単にフォーム/ textarea要素ですか? – Dave

+0

平凡な古い形式のテキストエリア –

+0

こんにちは、それを解決できましたか? – Sisir

答えて

9

2つの異なる置換文字列があります。だから一回の交換でそれを作ることは不可能です。

しかし、2番目のreplace()は、より効果的なプレーンストリング置換に変更できます。

content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>') 
       .replace('\n', '<br />') + '</p>'; 

したがって、単一の正規表現があります。 :)

更新

Javascriptが私をbluffed。文字列replaceは最初のオカレンスのみを処理します。

How to replace all occurrences of a string in JavaScript?

ありを参照してください。また、replaceAllのいくつかの可能な回避策の実装を与えられています。

+1

この解決策の問題点は、2回目の置換呼び出しが最初の一致のみを置き換え、すべて一致しないことです。 *。*残りの改行をすべてキャッチするには '.replace(/ \ n/g、 '
')'が必要です。 –

+0

私は訂正しました。ありがとう。答えを更新しました。 – Vadzim

1

私は同様の要件に直面していました。つまり、wpautopの機能をjavascriptに似せて(テーマカスタマイザで使用するため)です。だからここ

は、この問題に対する私のアプローチです:

まず、2つの改行がある場合を交換してください。

to = to.replace(/\n{2}/g, '&nbsp;</p><p>'); 

次に、改行が1つだけ残っている場合に置き換えます。

to = to.replace(/\n/g, '&nbsp;<br />'); 

そして最後に<P>タグ

to = '<p>' + to + '</p>'; 

私は& NBSPを使用中の全コンテンツを包みます。私のスタイリングはパラグラフの後の余白を暗示していたからです。あなたがそれらを必要としない場合は省略することができます。また、1つの欠点は、次の段落の先頭に1行の改行が挿入されていることですが、これは私がそこで暮らすことができるものです。

関連する問題