좋아요, 그 제목은주의 그래버였습니다. 나는 그것을 인정할 것이다. 지금 질문하기!AS3 팬더 티컵 (재귀 구문 분석, 태그 지정 및 정규식)
개요 프로젝트에 일부 코드가 있습니다. 해당 태그 텍스트를 HTML 태그 (Flash 위키 용)로 작업하고 있습니다. 나는 자기가 포함하고있는 별도의 파일을 만들었는데, 나는이 질문에 더 명확하게하기 위해 집중할 것이다.
내가 원하는 것 입력 내용은 키워드 목록과 텍스트 블록입니다. 이 경우 입력이 예상되는 출력이 있어야한다
["panda","tea","tea cup","panda tea cup"];
및
"Tea is good. I like tea cups, too. Pandas also like tea but need special panda tea cups to drink it.";
입니다 :
"<Tea> is good. I like <tea cups>, too. <Panda>s also like <tea> but need special <panda tea cups> to drink it.
나는 내가이 작업을 수행 할 수있을 거라고 생각 문제 간단한 replace() 함수를 사용했지만 결국에는 다음과 같이 끝낼 것이라고 깨달았습니다.
"<Tea> is good. I like <<tea> cups>, too. <Panda>s also like <tea> but need special <<panda> <<tea> cups>> to drink it."
나는 싫어.
필자는 결국 가장 긴 키워드로 시작하여 코드를 가장 작은 키워드로 나누는 재귀 함수를 작성하기로 결정했습니다. 지금은 완전히 혼란스럽고 재귀적인 오류가 계속 발생합니다.
전체 코드 귀하의 훌륭한 답변을
//Setup
var kw:Array = ["panda","tea","tea cup","panda tea cup"];
var s:String = "Tea is good. I like tea cups, too. Pandas also like tea but need special panda tea cups to drink it.";
var openTag:String = "<<";
var closeTag:String = ">>";
var tS:Array = [];
//Sort by length (longest to shortest)
for (var i:int = 0; i<kw.length; i++) {
for (var j:int = kw.length - 1; j > i; j--) {
if (kw[j - 1].length < kw[j].length) {
var temp:String = kw[j - 1];
kw[j - 1] = kw[j];
kw[j] = temp;
}
}
}
//Parse
tS[0] = s;
s = recursiveParse(s);
var n:int = 0;
function recursiveParse(m:String) {
var tP = kw[n];
if (m.length == 0) {
return "test";
}
var p:RegExp = new RegExp(tP,"gi");
m = m.replace(p,openTag + "$&" + closeTag);
tP = "[<>]";
p = new RegExp(tP);
var b:Array = m.split(p);
var fI:String = "";
n++;
for each (var f in b) {
if (f.length > 0) {
tS[tS.length] = recursiveParse(f);
}
}
return fI;
}
trace(s);
사전에 감사합니다! 위의 코드는 어느 정도 신경 쓰이지 않습니다. 당신의 대답이 코드에 대한 간단한 3 줄 수정이나 자신의 33 라인 코드에서 내 작업을 무시한다면, 나는 그걸로 충분하다. 입력이 출력으로 변환되는 한.
업데이트 : 좋아요, 이제 stackoverflow가 꺾쇠 괄호를 숨기고 있음을 알았습니다. 그걸 고쳐야 해. 업데이트 : 꺾쇠 괄호가 고정되었습니다.
"차"와 "차 컵"에는 "차"가 포함되어 있습니다. 우선 순위가 있습니까? 아니면 여러 번 태그를 추가 할 수 있습니까? – philipp
우선 순위가 없습니다. 내 의도는 그들을 완전히 별도로 처리하는 것입니다. 더 나은 설명을 위해 질문 설명에서 예상 결과를 확인하십시오. –