你的j是原始未被替换的长度,
但是当你进行第一次替换后,你的实际长度就超过j了
所以你用这种循环是解决不了的,
用递归或者正则吧正则:
strtext.replace(/[/g, "<img src=em/").replace(/]/g, ".gif/>");

解决方案 »

  1.   


    <html> 
    <head> 
    <script>
    var reg = /\[em(\d{2})\]/ig;
    function init(allowedLength){
    div2.innerHTML = div1.innerHTML.replace(reg,"<img src=\"em/em$1.gif\"/>");
    }
    </script>
    </head> 
    <body onload="init()"> 
    替换前:
    <div id="div1">
    <xmp>
    我想把“[em01]”这种格式的字符替换成 <img src=em/em01.gif>我写的替换函数如下: 
    替换结果是 <img src=em/em01.gif],如果是“[em01][em02]...”或更多,则后面的[]没有被替换成 <img src=em/.gif>
    </xmp>
    </div>
    替换后:
    <div id="div2">
    </div>
    </body> 
    </html>
      

  2.   

    樓主的 rep()這個函數可以實現的,不過循環要改一下:
    function rep(strtext){ 
          var i; 
          var j=strtext.length; 
          var str1=strtext; 
          for(i=0;i <str1.length;i++)         { 
              if(str1.charAt(i) == "[") 
                str1=str1.replace("["," <img src=em/"); 
              else if(str1.charAt(i) == "]") 
                    str1=str1.replace("]",".gif/>"); 
            } 
          return str1; 
    }
    因為在你替換的同時 str1長度也在改變,和傳入的strtext的長度不一樣了.
    所以改成這樣就可以了,當然 j 變量就沒用了.
    在javascript 中 其實沒有必要做循環替換.可以用正則表達式最簡單.
    像1樓寫的,不過1樓的正則表達式有問題應該是:
    strtext.replace(/\[/g," <img src=em/").replace(/\]/,".gif/>");
    這樣就可以了.
      

  3.   

    加/g循环替换所有内容,不加/g的话只替换一次replace(/\[em01\]/g,'\<img src=em\/em01\.gif\>')
      

  4.   

    var s="[em01][em02]";
    var oReg=/\[(.*?)\]/g;
    s=s.replace(oReg,"<img src=em/$1.gif>");
    alert(s);
      

  5.   

    我写的正则(2楼)含义如下:
    /\[em(\d{2})\]/ig;首、尾的 / 在javascript中表示定义一个正则变量
    最后的 i 表示忽略大小写;g 表示匹配全部然后就是 \[em(\d{2})\]/ 了
    \[ 转义为 [
    em 就是 em
    () 表示分组
    \d 表示数字
    {2} 表示前面的表达式出现2次
    \] 转义为 ]然后就是"<img src=\"em/em$1.gif\"/>"
    其他的不用说,$1 表示分组(被括号括起来的那段)中匹配的表达式
    想学正则可以看看下面的地址,看懂后简单的正则就会了
    http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm