2011-05-01 112 views
1

我需要som正則表達式幫助。我有這個代碼,我想匹配。最後一個字符串與正則表達式不匹配

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}}到來時停止。前兩個註冊表沒有html標籤。

我需要一些幫助來弄清楚如何做最後一個。

謝謝

回答

2

您的模式是貪婪的,這意味着它將匹配最大的可能字符串。使用.*?.+?而不是.*.+。有關「貪婪」和「懶惰」操作符之間區別的更詳細解釋,請查閱here

+0

謝謝,應該看看那個。 – user355510 2011-05-01 18:12:09