shawl.qiu Javascript 正则调试器 RegExpBox 2007-9-4

shawl.qiu Javascript 正则调试器 RegExpBox 2007-9-4


说明:
其实这个很容易写的, 不过还有一点特色.
就是嘛, 可以一次执行多条语句, 类似于批处理, 这也正是目前许多正则调试器所欠缺的一个功能, 但是这个功能真的很重要...

shawl.qiu
2007-09-05
http://blog.csdn.net/btbtd

演示:
http://files.myopera.com/btbtd/javascript/RegExpBox/2007_9_4/RegExpBox.htm

内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>RegExpBox - shawl.qiu template </title>
<style type="text/css">
/* <![CDATA[ */

/* ]]> */
</style>
<script type="text/javascript">
/*<![CDATA[*/
 if (navigator.appName=="Microsoft Internet Explorer") 
 {
  //最大化窗口
  self.moveTo(-5,-5)
  self.resizeTo(screen.availWidth +8,screen.availHeight+8)
  //这个脚本定义的宽度其实比原窗口还要大那么一点.
 }
/*]]*/
</script>
</head>
<body>
<form id="MainForm">
<div id="Set0">
  <p> 输入: <br />
   <textarea cols="90%" rows="5" id="InputTxa"> #if 
#else 
 #elif 
#endif 
123456
#define 
 #undef 
#warning 
#error 
  #line  
#region 
#endregion  </textarea>
  </p>
</div>

<div id="Set1">
<p>
   <input type="submit" id="Submiter" value="提交" />
   <input type="reset" value="重置" />
  | Debug:  <input type="checkbox" id="DebugCbx" />
</p>
</div>

<div id="Set2">
<p>输出: <br />
  <textarea cols="90%" rows="10" id="OutputTxa"> </textarea>
</p>
</div>

<div id="Set3">
</div>

<div id="Set4">
<textarea cols="90%" rows="5" id="PtrTxa">//s+/g
/n
//#/g
/t# </textarea>
<!-- <textarea cols="90%" rows="5" id="PtrTxa"></textarea>-->
  <br/>
 单行对应替换正则, 双行对应结果正则.
</div>

<div id="Set5">
 Pattern: 
  <br/>
</div>

<div id="Set6">
<input type="radio" name="FuncRdo" value="Trim" />:Trim
<input type="radio" name="FuncRdo" value="LTrim" />:LTrim
<input type="radio" name="FuncRdo" value="RTrim" />:RTrim
<input type="radio" name="FuncRdo" value="Clear" />:Clear
<br/> <input type="radio" name="FuncRdo" value="Trim_M" />:Trim_M
<input type="radio" name="FuncRdo" value="LTrim_M" />:LTrim_M
<input type="radio" name="FuncRdo" value="RTrim_M" />:RTrim_M
<br/> <input type="radio" name="FuncRdo" value="Number" />:Number
</div>
</form>

<script type="text/javascript">
/*<![CDATA[*/
 var Set = [];
 var SetLen = 7;
 for(var i=0; i<SetLen; i++) Set.push(document.getElementById("Set"+i));
 
 var SetOrder = [0541623];
 
 var Parent = Set[0].parentNode;
 for(var i=0; i<SetLen; i++) Parent.removeChild(Set[i]);
 for(var i=0; i<SetLen; i++) Parent.appendChild(Set[SetOrder[i]]);

 var InputTxa = document.getElementById("InputTxa");
 var OutputTxa = document.getElementById("OutputTxa");
 var Submiter = document.getElementById("Submiter");
 var PtrTxa = document.getElementById("PtrTxa");
 var DebugCbx = document.getElementById("DebugCbx");
 var FuncRdoRange = document.getElementsByName("FuncRdo");
  
 Submiter.onclick =
  function()
  { 
   var Result = InputTxa.value;
   PtrTxa.value = fClearLine(PtrTxa.value, 1);
   
   var PtrAr = PtrTxa.value.split("/n");
   var Len = PtrAr.length;
   if(Len.length%2===0) throw new Error("错误的正则模式, 模式必须以行为单位, 成对出现!");
   
   for(var i=0; i<Len; i++)
   {
    //Result = Result.replace(/^/s+|/s+$/g, "");
    var Ptr = []
    PtrAr[i].replace
    (
     /^.*?//([/s/S]*)//([gim]*)/i, 
     function($0, $1, $2)
     {
//       $1 = $1.replace(/^[/r/n]+|[/r/n]+$/g, "");
//       $2 = $2.replace(/^[/r/n]+|[/r/n]+$/g, "");
      Ptr.push($1);
      Ptr.push($2);
      //alert(fListCharcode($2));
     }
    );
    //alert(Ptr.length)
    if(Ptr.length!=2) throw new Error("错误的替换模式!");
    
    //Ptr[0] = Ptr[0].replace(/(//|/+)/g, "//$1");
    Ptr[1] = Ptr[1].replace(//s+/g, "");
    
    //Ptr[1] = Ptr[1].replace(///n/g, "/n");
    //alert(PtrAr[TempI])
    
    var Re = new RegExp(Ptr[0]+"", Ptr[1]+"");
    
    var TempI = i+1;
    
    PtrAr[TempI] = PtrAr[TempI]
    .replace(///n/g, "/n")
    .replace(///r/g, "/r")
    .replace(///f/g, "/f")
    .replace(///t/g, "/t")
    .replace(///v/g, "/v")
    ;
    
    Result = Result.replace(Re, PtrAr[TempI]);
    i+=1;
   }
   
   Result = Result.replace(//r/g, "");
   
   OutputTxa.value = Result;
   if(DebugCbx.checked)
   {
    alert(fListCharcode(Result));
   }
   //alert(fListCharcode(Result));
   
   return false;
  };  
 
 
 var RdoLen = FuncRdoRange.length;
 
 while(--RdoLen>-1)
 {
  var Rdo = FuncRdoRange[RdoLen];
  Rdo.onclick = 
   function()
   {
    if(this.checked)
    { 
     switch(this.value)
     {
      case "Trim":
       PtrTxa.value = "/^//s+|//s+$/g/n";
       break;
       
      case "LTrim":
       PtrTxa.value = "/^//s+/g/n";
       break;
       
      case "RTrim":
       PtrTxa.value = "///s+$/g/n";
       break;
       
      case "Trim_M":
       PtrTxa.value = "/^[^//r//n//S]+|[^//r//n//S]+$/gm/n";
       break;
       
      case "LTrim_M":
       PtrTxa.value = "/^[^//r//n//S]+/gm/n";
       break;
       
      case "RTrim_M":
       PtrTxa.value = "///s+$/gm/n";
       break;
       
      case "Number":
       PtrTxa.value = "/([//d]+)$/gm/n$1";
       break;
       
      default:
       PtrTxa.value = "//g/n"; 
       break;
     }
    }
   }
 }
  
 function fClearLine(Source, iProtect, bDebug)
 {// shawl.qiu code : return string || void return
  var bStr = false;
  if(!iProtect) iProtect = 0;
  if(Source.constructor==String) Source = [Source], bStr = true;
  
  var sPtr = "[//s]*?//n";
  var sFianlPtr = fRepeatString(sPtr, iProtect);
  var TempAr = ["(//n", sFianlPtr, ")""[//s]*//n"];
  var TempRe = new RegExp(TempAr.join("")"g");
  
  Source[0] = Source[0].replace(TempRe, "$1")
  
  if(bDebug)
  {
   document.write("sFianlPtr: ", sFianlPtr, "<br/>");
  }
  
  if(bStr) return Source[0];
  
  function fRepeatString(sIpt, iLen)
  {// shawl.qiu script
   if(!sIpt)return "";
   if(!iLen&&iLen!==0) iLen = 2;
   iLen -= 0;
   return new Array(iLen+1).join(sIpt);
  } // end function fRepeatStr

 } // end function fClearLine(Source, iProtect, bDebug)
 
 function fListCharcode(Source)
 {// shawl.qiu code : return string
  var bStr = false;
  if(Source.constructor==String) Source = [Source], bStr = true;

  var Len = Source[0].length;
  var Ar = [];
  var TempAr = [];
  
  for(var i=0; i<Len; i++)
  {
   var CurChar = Source[0].charAt(i);
   //alert(CurChar) 
   Ar.push(CurChar);
   TempAr.push(CurChar.charCodeAt());
   
   if(CurChar.charCodeAt()==10||i===Len-1)
   {
    Ar.push(TempAr.join(","));
    Ar.push("/n");
    TempAr = [];
   }
  }
  
  Source[0] = Ar.join("");    
  if(bStr) return Source[0];
 } // end function fListCharcode(Source)
/*]]*/
</script>
</body>
</html>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值