0)
한동안 regular expression(정규식) 에 빠져서(?) 헤어나오지 못했는데요,
javascript 로 for 문 돌리는 것을 문장으로 축약해보려는 시도였죠.

나중에 많은 분들의 의견들을 보다보니,
알고리즘의 레벨에서 느리다는 얘기가 많이 나왔는데요,

해당 정규식을 찾지 못하는 경우에
브라우져 자체가 멈추는 경험을 자주 하게되긴 했습니다.

버그가 한참 남아있는 상태처럼 보이긴 합니다만
.. 그래도, 나름 노력(?)이라는 게 있었고..
 
일단 올려봅니다.

*주의?*
소스에 있는 <html> 이나 <!doctype>, // 주석 등은
샘플로 넘어가지는 않을겁니다.
test 용으로도 쓰려고 모아둔(?) 것들이라 생각해두세요.

1)
원래 목표(?)는, 정규식을 이용해서 태그를 받아내는 것이었습니다..
이것저것 하다가 여기까지(?) 와버렸네요.

*참고* http://note.cyworld.com/17126625/883138 

..

2)

<!doctype><!-- --><![CDATA[]]><?php ?><html><script>var v130605_1='</html></'+'script>';</script></html>
<script>

document.write('<textarea>' + v130605_1 + '</textarea>');

var e130605_2;

(function() {

  var
  p = /<(![a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*>|<([a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/>|>(([^<]|<(?!\4[\s>]|\/\4[\s>]|script[\s>])|<script([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/|>(([^<]|<(?!\/script[\s>]))*)<\/script[\s]*>))*)<\/\4[\s]*>)/ig

  // <!-- <![CDATA[ <? 비포함버전
  //    p=/<(![a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*>|<([a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/>|>(([^<]|<(?!\4[\s>]|\/\4[\s>]|script[\s>])|<script([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/|>(([^<]|<(?!\/script[\s>]))*)<\/script[\s]*>))*)<\/\4[\s]*>)/ig
  // !doctype !- ![ 비포함버전
  //    p=/<([a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/>|>(([^<]|<(?!\1[\s>]|\/\1[\s>]|script[\s>])|<script([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/|>(([^<]|<(?!\/script[\s>]))*)<\/script[\s]*>))*)<\/\1[\s]*>)/ig
  // !doctype !- ![ 비포함버전 중복태그 미처리버전
  //    p=/<([a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/>|>(([^<]|<(?!\/\1[\s>]|script[\s>])|<script([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/|>(([^<]|<(?!\/script[\s>]))*)<\/script[\s]*>))*)<\/\1[\s]*>)/ig
  // script 비포함버전
  //    p=/<([a-z]+)([\s]+[^>"=\s]+(=[^>"\s]+|="[^"]*")?)*[\s]*(\/>|>(([^<]|<(?!\/\1[\s>]))*)<\/\1[\s]*>)/ig
  ;

 e130605_2 = function(v) {
  //  document.getElementById('x').innerText=p.exec(v);

  document.getElementById('x130605_3').value = v.replace(p, '[$1$4]$8[/$1$4]');

  //  document.getElementById('x').innerText=v.replace(p, '[$1$4]$8[/$1$4]');
  //  document.getElementById('x').innerText=v.replace(p, '[$1]$5[/$1]');
  //  document.getElementById('x').innerText=v.replace(p, '[script]$4[/script]');
 }

})();

</script>
<span>
89</span>
<textarea onclick=e130605_2(this.innerText||this.value); >1
23</textarea>
<textarea id=x130605_3>4
56</textarea>

 
-- 새 창에 샘플 보여주기 --

..

3)
89


..

4)
소스 내에서의 멀티표현(?)을 받아들이는 정도까지는 아니구요.. (<font><strong></font></strong> 같은..)
일단, 안에 있는 내용을 샅샅히 훑는 정도까지는 할겁니다.

<?php ?> 까지 하고 싶었지만..
$1 $4 등의 표현갯수 문제에서 막힌 것 같네요..

태그의 <, > 기호를 [, ] 기호로 바꾸고,
태그 안값(attribute)들을 표시하지 않습니다.

사용방법은
html 소스를 두번째 textarea (텍스트박스)에 붙여넣고
텍스트박스를 클릭하면

세번째 textarea 에 변환된 내용이 표시됩니다.

*참고*
첫번째 textarea 는 스트링을 textarea 태그로 닫아두는 시도입니다.
딱히 문제되지는 않더라구요. 이미 깨진 html 태그라서 그럴지도요 = =..
( </html> 태그 이후 document.write 시전 = =..)



..

wantHate killofki@. 

 






Posted by killofki
,