2011-12-14 8 views
0

私は、Javascriptでバストアップしたいと思うウィキスタイルのレンダリングフィールドを持っています。などNAME1と説明1が一緒に属しJavascript - 書式設定されたテキストを解析し、値を順番に抽出しますか?

{color:#47B}_name1_{color} 
{color:#555}description1{color} 
--- 
{color:#47B}_name2_{color} 
{color:#555}description2{color} 
--- 
{color:#47B}_name3_{color} 
{color:#555}description3{color} 
--- 
etc 

は、NAME2と記述2が一緒に属し、かつ:

テキスト

は、私はこのようなルックスを解析しようとしています。名前と説明の値はユーザーが指定した値で、複数の行にまたがる可能性があります。

私の最終目標は、各名前と各説明の値をテキストから抽出することです(name1をdescription1などと確実に関連付けることができるようにすること)。

私は正規表現を使用してすべての名前を配列にし、すべての説明を配列にマッチさせた場合、配列内の項目の順序が正しいことを保証できますか?つまり、名前0()は、常にが解析されたテキストの最初の名前になります(名前配列にmatchのjavascript正規表現を行ったと仮定します)。また、この悪い習慣/私はこれを別の方法で行うべきですか?

/^(\{color\:#47B\})(_)(\s*?)(.*?)(\s*?)(_)(\{color\})$/

そして、私は説明を一致させるために使用している正規表現は次のとおりです:

私は名前を一致させるために使用しようとしている正規表現です

/(\{color\:#555\})(.*?)(\{color\})/

答えて

1

A正規表現の検索では、ソースの順番に(つまり、ソーステキスト内に出現する順に)マッチが常に返されます。

私はあなたが2つの正規表現マッチ(名前と説明のために1つ)をしてから2つの結果配列を得て、namesmatch[i]が常にdescriptionmatch[i]となることを保証したいので、この質問をしていると仮定します。ただし、これはソーステキストが常に完全に完璧な場合にのみ当てはまります。

この場合は、一度に両方に一致する正規表現を使用するか、ソースを各ブロックの--区切りで区切り、各ブロック内で一致させる方がよい場合もあります。それがより安全な理由は、ソーステキストにエラーが含まれている可能性があります。少なくともこの場合は、それを検出して可能な限り多くの良好なデータを持つことができます。

正規表現についての注意。 .は改行と一致しないため、{color}中括弧の中に改行がある場合は、改行を明示的に含める必要があります。 [\s\S]はこれの共通のイディオムです。

+0

これは他の値ではなく、 '---'で分割することをお勧めします。 –

関連する問題