2013-07-01 3 views
0

파일 내용이 메모리에 있습니다. 처음 두 변수가 밀려으로첫 번째 캐치에서만 정규 표현식 일치 (JavaScript)

var result = /\{\{ _(.+) \}\}/i.exec(fileContents); 

처음에 작동하는 것 같다, : 나는 /\{\{ _(.+) \}\}/i 그들을 잡으려고 노력하고있어

{{ _("variable1") }} 
{{ _("variable2") }} 
{{ _("variable3") }} 

: 파일 내에서의 양식 변수가있다 배열에 저장하지만, 전체 파일 내용을 푸시합니다.

무엇이 누락 되었습니까?

보너스 : 내가 대신 변수 1를 잡을 수 있다면 그것은 좋지 않을까 {{_ ("변수 1")}}하지만 그것으로 살 수 있습니다.

+1

정규식에 'g'한정자를 추가 해보십시오. '(. +)'의 주위에'\ ("'와'"\)'를 추가하면 (자), 양쪽 모두의 문제가 해결됩니다. –

+0

** {{_ ("홈")}} | {{_ ("PikaPay")}} ** 전체적으로 – jviotti

+0

예, 한 줄에 여러 개가있는 것이 두려웠습니다. 그것은 당신의 경우에 많이 변합니다. 아래 내 대답을 참조하십시오. 문제는'. +'욕심이 많다. –

답변

2

g 플래그가 필요합니다. 이 방법을 사용하면 exec에 전화 할 때마다 추가로 일치하는 항목을 얻을 수 있습니다 (더 이상 일치하지 않을 때까지 null이됩니다). 보너스의 경우 패턴에 ("")을 포함 시키면 캡쳐되지 않습니다. 그런데

r = /\{\{ _\("(.+?)"\) \}\}/ig; 
while(m = r.exec(fileContents) 
{ 
    // m[0] will contain the entire match 
    // m[1] will contain the contents of the quotes 
} 

"variable1"가 탈출 따옴표를 포함 할 수없는 경우 등 (, : 마지막으로, 당신은 하나의 라인에서이 패턴을 여러 번가있는 경우, 그렇지 않으면 당신은 재미 놀라움을 얻을 것이다는 .+ ungreedy을 할 수 있습니다 "some\"oddvariable")이면이 정규식은 약간 더 효율적이어야합니다 :

r = /\{\{ _\("([^"]*)"\) \}\}/ig 
+0

대단히 감사합니다. – jviotti