你的j是原始未被替换的长度,
但是当你进行第一次替换后,你的实际长度就超过j了
所以你用这种循环是解决不了的,
用递归或者正则吧正则:
strtext.replace(/[/g, "<img src=em/").replace(/]/g, ".gif/>");
但是当你进行第一次替换后,你的实际长度就超过j了
所以你用这种循环是解决不了的,
用递归或者正则吧正则:
strtext.replace(/[/g, "<img src=em/").replace(/]/g, ".gif/>");
解决方案 »
- Javascript菜鸟问题
- Javascript验证的问题
- [急]javascript 中的alert还是执行不了!!!请大家帮忙!
- 我想做一个像,163邮箱里的输入收件人时的逐步提示效果,请赐教,急,最好是代码!感谢!
- offsetHeight属性
- 某一框架中字符替换问题,谁帮我解决,我愿送上500分,急!谢谢
- 如何获得 td 元素的高度 ??????????????????
- 看看这段JAVASCRIPT,表格里面动态增加行的功能,有一点需要加强的功能,进来看看,多谢了,多谢,有源文件!
- MSDN中的树形菜单如何实现?
- ◎◎◎急问如何实现当浏览器完全加载htm页面标记之后再执行js???◎◎◎
- 求js交换2层代码
- javascript缺少对象错误!!!急~~在线等
<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>
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/>");
這樣就可以了.
var oReg=/\[(.*?)\]/g;
s=s.replace(oReg,"<img src=em/$1.gif>");
alert(s);
/\[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