2016-06-22 9 views
1

몇 개의 문자열이 있는데 큰 따옴표 사이에 나타나는 문자를 꺼내야합니다. 문제는 그룹으로 그들을 붙잡고 싶다는 것입니다.까다로운 RegEx 캡처

var str = 'FF\"J"A4"L"'; 
var results = str.match(/\"(.*)\"/); 

이렇게하면 첫 번째와 마지막 큰 따옴표 사이의 모든 값이 반환됩니다. 이 경우 J "A4"L을 반환하지만 반환해야하는 것은 JL입니다.

따옴표 사이의 내용은 거의 로를 포함하여 문자와 숫자}, @=같은 모든 유니 코드 문자입니다.

정규식으로 이것을 완료하는 방법에 대한 아이디어가 있습니까?

+0

'/"(.*?)"/g'의 그룹 1 값을 얻기 위해 루프에서'RegExp # exec'를 사용하십시오. 또는 "/"([^] *?) "/ g' –

+1

나는이 질문이 http://stackoverflow.com/q/22444/940217의 중복이라고 생각하지 않는다. 다른 곳에서 물어 보거나 대답 할 수도 있지만, 그러나 이것은 같은 경우가 아닙니다. –

+0

/".*?"/이 올바르지 않습니다. 너무 욕심이 많을거야. –

답변

1

어떤이는 /g "전역 플래그"함께 찾는 : 당신의 예에서

/("[^"]*")/g 

, 이렇게하는 거예요

var str = 'FF\"J"A4"L"'; 
var results = str.match(/("[^"]*")/g); 

이 일을, results[""J"", ""L""]이 될 것입니다 , 여기에는 전체 경기가 포함됩니다 (이것이 바로 따옴표가있는 이유입니다). 당신은 (단지가 아닌 그룹 전체 경기 지역을 반환) 만 일치하는 그룹을 원한다면

, 당신은 exec 사용합니다 :

이제
var str = 'FF\"J"A4"L"'; 
var results = [] 
var r = /("[^"]*")/g 
match = r.exec(str); 
while (match != null) { 
    results.push(match[1]) 
    match = r.exec(str); 
} 

, 결과는 ["J", "L"]

1

입니다 그것은 같은 소리 따옴표 사이의 내용이 당신이 멀리 얻을 수있는 경우 견적를 제외한 모든 문자

/"([^"]*)"/ 
관련 문제