2016-05-01 7 views
1

次のデータ形式をJSONに整理するにはどうすればよいですか?データがどのように見える単純なテキストファイルです:Javascriptを使用して正規表現でファイルを解析し、jsonに変換する

A)Some block of info here<--Header Title-->を含有することが可能:

<--Header Title--> 
I am info for <--Header Title--> 
<--Header Title--> 
This <--Header Title--> is finished 
<--Header Title--> 
<--Header Title--> contains the following: 
stuff1 
stuff2 
stuff3 

B

<--Header Title--> 
Some block of info here 
<--Header Title--> 
Some block of info here 
<--Header Title--> 
Some block of info here 

のようないくつかのトリッキーなビットがあり、 )Some block of info hereは空でも空白/改行でもかまいません

<--Header Title--> 
<--Header Title--> 


<--Header Title--> 
Info text here 

c)Some block of info hereの形式は、(b)のような空白/改行でない限り、保存する必要があります。だから、先頭と終わりの空白/改行を維持する必要があり、次の

<--Header Title--> 

More info about blah 

blah blah blah 
blah blah 

<--Header Title--> 
Another info about blah 

すべてのすべては、私が簡単に検索のためのJSONにこれを変換したいです。簡単な例:

<-- Option 1 --> 
Nice text 
<-- Option 2--> 


<--Final stuff--> 
Listing all 
of 
the 
text 

<--Header Title--> 
I am info for <--Header Title--> 
<--Header Title--> 
This <--Header Title--> is finished 
<--Header Title--> 
<--Header Title--> contains the following: 
stuff1 
stuff2 
stuff3 

JSON:

\<\-\-(.*)\-\-\>\n(.*) 

しかし、これは最初のオカレンスだけをキャプチャし、そして(a)にない場合にのみ:

{ 
    "data": 
    [ 
     {"Option 1": "Nice text"}, 
     {"Option 2": ""}, 
     {"Final stuff": "Listing all\nof\nthe\ntext\n"}, 
     {"Header Title": "I am info for <--Header Title-->"}, 
     {"Header Title": "This <--Header Title--> is finished"}, 
     {"Header Title": "<--Header Title--> contains the following:\nstuff1\nstuff2\nstuff3"} 
    ] 
} 

私の現在の正規表現があります発生する。

+0

アンカーあなたのPAのような何かを行うことができます線の始まりにはタタンがあります。 –

答えて

1

あなたは正規表現/<--([\w\s]+)-->([\s\S]*?)(?=\n<--|$)/gを使用して、この

var str = `<-- Option 1 --> 
 
Nice text 
 
<-- Option 2--> 
 

 

 
<--Final stuff--> 
 
Listing all 
 
of 
 
the 
 
text 
 

 
<--Header Title--> 
 
I am info for <--Header Title--> 
 
<--Header Title--> 
 
This <--Header Title--> is finished 
 
<--Header Title--> 
 
<--Header Title--> contains the following: 
 
stuff1 
 
stuff2 
 
stuff3`; 
 

 

 
var reg = /<--([\w\s]+)-->([\s\S]*?)(?=\n<--|$)/g, 
 
    m, 
 
    res = { // object to store result 
 
    data: [] 
 
    }; 
 

 
while (m = reg.exec(str)) { 
 
    var data = {}; 
 
    data[m[1].trim()] = m[2].trim(); // storing data into object after formating 
 
    res.data.push(data); // pushing object to array 
 
} 
 
document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>');

Regex explanation

Regular expression visualization

関連する問題