我正在使用C#編寫HTML模板引擎。除了使用基本的字符串操作(查找/替換)而不是完整的編譯器外,我想實現與Handlebars.Net(Handlebars.js的C#實現)等庫類似的功能。在自定義HTML結構中查找開始和結束標記
語法將一些諸如:
{{#each item in items}}
<li>{{item.Name}}</li>
{{/each}}
我希望做簡單的字符串替換使用正則表達式,但我知道正則表達式將在這方面有不足之處,比如在本例中發現的結束標記下面(它會找到第一個嵌入{{/每}}而不是最後分析的第一個標籤時):
{{#each item in items}} //while parsing this tag...
<p>{{item.Name}}'s Hobbies:</p>
<ul>
{{#each hobby in item}}
<li>{{hobby.Name}}</li>
{{/each}} //this end tag would be found first
</ul>
{{/each}} //rather than this one
我需要找到任何給定的「標記」(如開頭和結尾{ {#each}} ... {{/ each}}),並創建一個類似DOM的結構來解析每個標籤的內容。 「DOM」可以嵌入多個標籤(認爲嵌入的foreach循環x4)。什麼是實現這一目標的好方法?
你應該嘗試以幾種不同的方式實現它 - 這就是你如何學習,你可以做到!當你遇到某些特定的事情時***回來並尋求幫助。 – caesay
要真正做到「正確」,你需要做輕鬆/解析,幾乎你說你不想做的事情。要做到這一點「快速」搜索你的字符串罰款每個{{#each}}和讀取{{/每個}}。這個函數然後是遞歸的,所以它支持嵌套條目。如果有很多不同的標籤,你需要處理所有這些。編寫這樣一個解析器是一項艱鉅的任務,如果你想展示你所嘗試過的東西,我會很樂意提供幫助,但這是一項非常重要的任務,我懷疑你會找到一個能夠做到這一點的人你在這裏。 SO是爲了幫助,而不是編碼器4免費。 – dman2306
'好'的方法是編寫一個分析器,它知道狀態和嵌套元素等 - 而不是正則表達式字符串替換。爲什麼你不想編寫一個解析器(我認爲你的意思是'全面編譯器')? – Tim