2011-05-01 2 views
1

나는 som regex help가 필요합니다. 나는이 코드를 가지고 일치시키고 싶다.마지막 문자열이 정규 표현식과 일치하지 않습니다

var i1 = "<ul> {{#items}}<li>{{.}}</li>{{/items}} </ul>"; 
var i2 = "<ul> {{#items}}<li>{{.}}</li> <li><ul> {{#items}}<li>{{.}}</li>{{/items}} </ul></li>{{/items}} </ul>"; 
var i3 = "<ul> {{#items}}<li>{{.}}</li>{{/items}} </ul> <ul> {{#items}}<li>{{.}}</li>{{/items}} </ul>"; 


var reg = /{{(?:(?:#|!#)([\s\w\.-]+))}}+(.+(?:{{\/.+}}))/ 

i1 => ["{{#items}}<li>{{.}}</li>{{/items}}", "items", "<li>{{.}}</li>"] 
i2 => ["{{#items}}<li>{{.}}</li> <li><ul> {{#items}}<li>{{.}}</li>{{/items}} </ul></li>{{/items}}", "items", "<li>{{.}}</li> <li><ul> {{#items}}<li>{{.}}</li>{{/items}} </ul></li>"] 
i3 => ["{{#items}}<li>{{.}}</li>{{/items}} </ul> <ul> {{#items}}<li>{{.}}</li>{{/items}}", "items", "<li>{{.}}</li>{{/items}} </ul> <ul> {{#items}}<li>{{.}}</li>"] 

마지막으로 일치하지 않는 항목이 있습니다. 난 그냥 첫 번째 ul # 항목을 일치시키고 첫 {{/ items}}이 올 때 중지합니다. reg는 처음 두 개의 html 태그없이 작동합니다.

마지막 도움말을 이해하는 데 도움이 필요합니다.

감사합니다.

답변

2

패턴이 너무 많아서 가능한 가장 큰 문자열과 일치합니다. .*.+ 대신 .*?.+?을 사용하십시오. "greedy"및 "lazy"연산자의 차이점에 대한 자세한 설명은 here을 확인하십시오.

+0

감사합니다. – user355510

관련 문제