现在做模仿做语法着色有如下语名:
// aaaa bbbbb现在给注释形如// 加前景色:Green
str = str.replace(/\/\/(\S+)/gi,"<font style='color:Green'>//$s</font>");结果:// aaaa bbbbb这样没问题。但是现在如果现在语句变成 // aaaa public bbbb 由于public已经被着色了,再用以上的正则,替换 public 不会变成Green色。于是我写了下面的下则替换:
str = str.replace(/\/\/(\S+)/gi,function($1)
        {
            var s1=$1;
            s1 = s1.replace(/\<font style='color:(\w+)'>(\w+)\<\/font\>/,"$1");
            return "<font style='color:Yellow'>"+s1+"</font>";
        });红色的地方不对,想不出来怎么写。。求教高手!!!

解决方案 »

  1.   

    忘了说了,这是写在javascript里面的
      

  2.   

    顺便://注释 /* */
    //str = str.replace(/\/\*(\S*)\*\//gim,"<font style='color:Green'>/*$1*/</font>");这句也不对,找不到哪里错了。。
      

  3.   

    给你个例子。<html>
        <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
            <title>用正则实现语法着色</title>
        </head>
        <script type="text/javascript">
    /*
    // Regex Example in JavaScript
    // Rainsome Studio
    // [email protected]
    // 2009-02-05 in Shanghai
    */
    <!--//
    //用正则实现语法着色
    String.prototype.SetColor = function()
    {
    var _str_ = encodeURIComponent(this);
    var regex = /^(.+)$/g;
    var _str1_ = _str_.replace(regex,"<span style = 'color:#f00;'>$1</span>");
    return decodeURIComponent(_str1_);
    }
    function encolor(obj)
    {
    var text = obj.value;
    var str ="着色结果:"
    text = text.SetColor();

    var result = document.getElementById("result");
    result.innerHTML = str + text ;
    } //-->
        </script>
        <body onmousedown="whichElement(event)">
    <div id = "divtest" ><b>用正则实现语法着色(红色).</b></div>
            <input name="tagStr1" type="text" class="tag_input" id="tagStr1" size="50" maxlength="50"  onblur = "encolor(this)"/> 
    <div id =  "result"></div>
        </body>
    </html>
      

  4.   

    str = str.replace(/\/\/(\S+)/gi,function($1) 
            { 
                var s1=$1; 
                s1 = s1.replace(/\ <font style='color:(\w+)'>(\w+)\ <\/font\>/,"$1"); 
                return " <font style='color:Yellow'>"+s1+" </font>"; 
            }); 我想知道,嵌套替换的时候,下划线的地方怎么写
      

  5.   

    写了一个,不过要考虑的地方很多,转义字符....都没考虑进去<style>
    *{font-size:12px;}
    </style>
    <body><div id="code">
    <pre>
    private void aaaa()
    {
        Response.Write("aaaaa");
    }// private void privateBB()
    // {
    //    var a=1;
    // }/*
    private void ccccc()
    {
       var a="aaa";//****/****/
       /*
       var b=1;
       */
    }
    */
    </pre>
    </div>
    </body>
    <script>
    var div = document.getElementById("code");
    var str=div.innerHTML;var RulReg = {};
    RulReg.KEWORD = /\b(private|public|protected|void)+\b/gi;
    RulReg.DBLCLEAR = /([\/]{2,})([^\n]+)/gi;
    RulReg.MULTICLEAR = /(\/[\*]+(?:.|\n|\r)+[\*]+\/)/gi;
    RulReg.FONT = /<font[^>]+>([^<]+)<\/font>/gi;
    RulReg.QUTOR = /"([^"]+)"/gi;//关键字
    str = str.replace(/\b(private|public|protected|void)+\b/gi,"<font style='color:blue'>$1</font>");
    //字符串
    str = str.replace(/("[^"]+")/gi,"<font style='color:red'>$1</font>");
    //注释部分 "//"
    str = str.replace(RulReg.DBLCLEAR,function(){
            var s = arguments[0];
            s = s.replace(RulReg.FONT,"$1");
            return s;
    });
    str = str.replace(RulReg.DBLCLEAR,"$1<font style='color:green'>$2</font>");
    //注释部分 "/* */"
    str = str.replace(RulReg.MULTICLEAR,function(){
            var s = arguments[0];
            s = s.replace(RulReg.FONT,"$1");
            return s;
    });
    str = str.replace(RulReg.MULTICLEAR,"<font style='color:green'>$1</font>");
    div.innerHTML = str;</script>