2017-04-06 2 views
1

나는 regex을 가지고 있습니다. 문자열에서 단락을 추출하고 각각을 배열로 푸시하려는 목적으로 .replace 메소드와 함께 사용하려고합니다.

필자는 getValues ​​함수로 어려움을 겪었으며 Match와 Group1을 콘솔에 기록 할 때 예기치 않은 결과가 발생했습니다.

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

실제 출력 비슷한 동작을 기대 해요 :

여기

는 코드 WIP입니다
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에서 볼 때 표현식은 단일 일치 및 그룹 만 반환합니다. 왜 불균형인가? 내가 뭔가를 놓쳐 버린 것 같아? 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