2017-04-06 5 views
1

私はregexを使用します。文字列から段落を抽出し、それぞれを配列にプッシュする目的で、.replaceメソッドと共に使用するつもりです。

私はgetValues関数で苦労していましたが、コンソールにMatchとGroup1の両方を記録したときに、予期しない結果が生じました。

ここでは、コードのWIPです:

var mystring = 'Valid prater\nLorem ipsum dolor sit amet, consectetur adipiscing elit. \nProin volutpat facilisis imperdiet. \n Nunc porttito\nMorbi non eros nec arcu condimentum ultrices in ut nunc. \nMaecenas elit tellus, scelerisque ac auctor fermentum, bibendum. ' 

var paragraphs = []; 
var obj = {}; 

var getValues = function(match,p1) { 
    console.log('Match: ' + match); 
    console.log('p1: ' + p1); 

    // obj= {}; 
    // obj['paragraph'] = p1; 
    // paragraphs.push(obj); 
}; 

mystring.replace(/([^\\n][^\\]+)/g, getValues); 

https://jsfiddle.net/7293mo7y/

予想される出力:

Match: Valid prater 
p1: Valid prater 
Match: Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
p1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Match: Proin volutpat facilisis imperdiet. 
p1: Proin volutpat facilisis imperdiet. 
Match: Nunc porttito 
p1: Nunc porttito 
Match: Morbi non eros nec arcu condimentum ultrices in ut nunc. 
p1: Morbi non eros nec arcu condimentum ultrices in ut nunc. 
Match: Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum. 
p1: Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum. 

私は実際の出力this example

に似た振る舞いを期待している:

Match: Valid prater 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Proin volutpat facilisis imperdiet. 
Nunc porttito 
Morbi non eros nec arcu condimentum ultrices in ut nunc. 
Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum. 
p1: Valid prater 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Proin volutpat facilisis imperdiet. 
Nunc porttito 
Morbi non eros nec arcu condimentum ultrices in ut nunc. 
Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum. 

コンソールに一致してp1を記録するときに期待される出力が得られない理由を誰もが説明できますか?

なぜ動作がthis exampleと異なるのですか?

期待される出力を得るには何が必要ですか?

ありがとうございます!

答えて

1

正規表現でMULTILINEフラグまたはmを利用できます。それはあなたがこのような各試合でフルラインを一致させるために、アンカー^$を使用することができます:

var mystring = 'Valid prater\nLorem ipsum dolor sit amet, consectetur adipiscing elit. \nProin volutpat facilisis imperdiet. \n Nunc porttito\nMorbi non eros nec arcu condimentum ultrices in ut nunc. \nMaecenas elit tellus, scelerisque ac auctor fermentum, bibendum. ' 

var paragraphs = []; 
var obj = {}; 

var getValues = function(match,p1) { 
    console.log('Match: ' + match); 
    console.log('p1: ' + p1); 
}; 

mystring.replace(/^(.*)$/mg, getValues); 

Updated JS Fiddle

+0

どうもありがとうございましたanubhava。これにより、望ましい出力が得られます。 あなたの式が複数のマッチとグループを(必要に応じて)コンソールに出力するのは混乱しますが、私がhttp://regexr.com/3fmplでそれを見ると、式はただ1つのマッチとグループを返します。なぜ格差?私は何かが欠けているに違いないと思う? thanks – fivedoor

+0

これはregexr.comが '\ n'の解釈方法を知らないからです。 [このデモ](https://regex101.com/r/jdqmCS/1)またはhttp://regexr.com/3fmpu – anubhava

+1

Aah - ありがとうございます。だから、私が持っていたものを調整して/([^ \ n] +)/ gを使い、希望の結果を得たように見える。https://jsfiddle.net/7293mo7y/3/。ご協力いただきありがとうございます。 – fivedoor

関連する問題