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
정말로 "올바르게"하려면 lexing/parsing을해야합니다. 그렇게하기 위해 문자열을 각각 {{#each} 벌금으로 부과하고 {{/ each}}까지 읽습니다. 이 함수는 재귀 적이므로 중첩 된 항목을 지원합니다. 다른 태그가 많으면 모든 태그를 처리해야합니다. 그러한 파서를 작성하는 것은 큰 일입니다. 만약 당신이 시도한 것을 보여주고 싶다면, 기꺼이 도와 드리겠습니다. 그러나 이것은 매우 큰 일이며, 당신이 그것을 위해 할 사람을 찾을 수 있을지는 의심 스럽습니다. 너 여기있어. 그래서 코더 4는 무료가 아니라 도움말입니다. – dman2306
'좋은'방법은 정규 표현식 문자열 교체가 아닌 상태와 중첩 요소 등을 인식하는 파서를 작성하는 것입니다. 왜 파서를 쓰고 싶지 않은가? (필자가 '풀 아웃 컴파일러'라고 가정) – Tim