html 문서들 안에서 내가 필요한 부분을 추출하려 할 때...
패턴...이라고 해야할까... 무언가 나타나는 순서를 정하고, 그것에 프로그램을 맞춰넣게 된다.

그것을 매번 하다보니... 귀찮아(?)져서... 저장해볼 겸... 만들어보려 했다.

...


<textarea name=textV>
<table id=tableAll><tr><td>1</td></tr><tr><td>2</td></tr><tr><td>3</td></tr></table>
</textarea>
<textarea name=out1></textarea><textarea name=out2></textarea>
<script>
var sText=new Array(
'<tr>', // 0
'<td>', // 1
'</'); // 2
function searchCount() { // useage : (string, pNum1, pNum2, eNum) -> pNum2-eNum
  var ar=arguments, sv=ar[0], i, a, b;
  a=0; b=-1;
  for (i=1; i<(ar.length-1); i++) {
    a=sv.indexOf(sText[ar[i]], a); if (a<0) break;
    a+=sText[ar[i]].length;
    }
  b=sv.indexOf(sText[ar[i]], a);
  if (a<0) return a; if (b<0) return b;
  return sv.substring(a, b);
  }
out1.innerText=searchCount(textV.innerText, 0, 2); // <tr> </
out2.innerText=searchCount(textV.innerText, 0, 1, 2); // <tr> <td> </
</script>


...





...

간단히 설명하자면,

텍스트 박스들에
첫번째는 입력값이고,
두번째는 <tr>과 마주치(?)는 </ 사이의 값이고,
세번째는 <tr> 다음 <td> 와 </ 사이의 값이다.

이런 방법으로 함수를 만들어놓으면
매번 index 와 length 를 조합해서 찾을 필요가 없...을 듯 보인다.

...

살짝 문제되는 점이...

<tr> 이나 <td> 의 경우, 지금처럼 한번만 처리하면 되는 경우는 문제가 안되지만,
뒤에 나타나는 2, 3 의 경우를 받아내기 위해서는 읽는 포인터를 다음으로 넘겨야 하는데,

함수쪽으로 넘기는 것은 string 앞이나 뒤에 선언하면 된다 치고(?),
함수쪽에서 스트링 외에 받아야하는 문제는 어떻게 풀어야 할까..?

array 로 선언하자니, 나중에 다시 delete 하기가 귀찮고...
... = =;... 일단 여기까지만 하자.

...

NowMark killofki@.


Posted by killofki
,