2011-08-03 10 views
0

で始まり、終わるすべての抜粋をマッチング。私はそれを試しました:は、私がどのように見えるテキストを持っている特定の単語

match(/(?=trans-top)(.|\s)*/g) 

魔女はトランストップで始まります。そして、それは動作します。今度は終了を指定したいと思います:

match(/(?=trans-top)(.|\s)*(?=trans-bottom)/g) 

とはありません。 Firebugのは私にエラーを与える:

regular expression too complex

私は他の多くの方法を試してみましたが、私が働いて解決策を見つけることができない...私はいくつかの愚かなミスを犯したSHUREよ:(

+0

Chromeの場合、複雑な正規表現の結果は最初の抜粋のトランストップボディです(エラーなし)。 – pimvdb

+0

あなたの試合には 'trans-top'が含まれますが、' trans-bottom'は含まれません。メタデータが必要かどうか –

+0

今のところそれは問題ではありません。私はすべての部品が必要です、メタや無しで。 – ciembor

答えて

1

これはかなりうまく動作します。あなたが先頭と末尾の改行をしたくない場合は

var test = "some non interesting part\ntrans-top\nbody of first excerpt\ntrans-bottom\nnext non interesting part\ntrans-top\nbody of second excerpt\ntrans-bottom\nnon interesting part"; 

var matches = test.match(/(trans-top)([\s\S]*?)(trans-bottom)/gm); 
for(var i=0; i<matches.length; i++) { 
    matches[i] = matches[i].replace(/^trans-top|trans-bottom$/gm, ''); 
} 

console.log(matches); 

に内部ループを変更します:が、それはすべて1つの正規表現ではありません

matches[i] = matches[i].replace(/^trans-top[\s\S]|[\s\S]trans-bottom$/gm, ''); 

それは改行を食べるべきです。

+0

ありがとうございますが、私はそれが1つの試合でできると確信しています:)。 – ciembor

+1

JavaScriptは正規表現でlookaheadとlookbehindをサポートしていないため、私はそれができないと思います。したがって、結果に(トランストップ)と(トランストップ)を含める必要があります。私は非キャプチャグループで試してみましたが、それは役に立ちません。気にしない場合は、(トランストップ)と(トランストップ)の取り外しを簡単にスキップできます。 – OverZealous

1

この試験関数は、1つの正規表現を使用して、返された配列にそれらすべてを配置各試合の内容をピッキングをループ:

function getParts(text) { 
    var a = []; 
    var re = /trans-top\s*([\S\s]*?)\s*trans-bottom/g; 
    var m = re.exec(text); 
    while (m != null) { 
     a.push(m[1]); 
     m = re.exec(text); 
    } 
    return a; 
} 

をまた、各マッチの内容を囲む任意lealdingと末尾の空白をフィルタリング。

関連する問題