菜鸟求教

Linktwelve 2011-06-23 02:37:43
function getreg(a,b)
{
var p=b;
var t="("+a+")";
var reg=new RegExp(t,"ig");
reg.test(p);
for (i=1;i<=RegExp.length;i++)
{
p.replace(RegExp.$i,"<here>"+RegExp.$i+"<here>");
}
document.getElementById("t2").value=p;
}

为什么t2中有符合正则的内容却没有变化?
...全文
168 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyun817 2011-06-24
  • 打赏
  • 举报
回复

function getreg(a,b)
{
var p="";
var t="("+a+")";
var reg=new RegExp(t,"ig");

var m ;
var n=0;
while((m = reg.exec(b))!=null)
{
var temp = b.substring(n,m.index+RegExp.$1.length);
n = m.index+RegExp.$1.length;
p += temp.replace(RegExp.$1,"<here>"+RegExp.$1+"<here>")
}
p+=b.substr(n,b.length-n);

alert(p);
//document.getElementById("t2").value=p;
}
getreg("[1-9][0-9]{4,}","123456879\///abcde987654321");
aperson111 2011-06-24
  • 打赏
  • 举报
回复

function getreg(a,b)
{

var p=b;
var t=a;

var reg=new RegExp(t,"ig");
var tmpres = reg.exec(b);//或者p.match(reg); 来更新全局RegExp

while(tmpres != null)
{
p = p.replace(tmpres,"<here>"+tmpres+"<here>");
tmpres = reg.exec(b);
}

alert(p);
}
getreg("[1-9][0-9]{4,}","123456879abacdae987654321adfa23432423432");

对RegExp不太熟悉,试了试,就这个方法还凑合。但是有个问题,如果匹配的内容有相同的,比如12345da12345da12345,就会出现只对第一个12345替换

坐等高手!
yangchun1213 2011-06-23
  • 打赏
  • 举报
回复
接分……
Linktwelve 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 showbo 的回复:]
你的a参数内容是什么?需要注意转义,如存在\,a参数值要为\\
[/Quote]
a是编辑框里的内容,字符串
  • 打赏
  • 举报
回复
你的a参数内容是什么?需要注意转义,如存在\,a参数值要为\\
Linktwelve 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 caikanxp 的回复:]
RegExp.$i?这么做应该得到的是undefined!
建议你试试 RegExp['$'+i]
其它内容未细看。
[/Quote]
还是不行..
CaiKanXP 2011-06-23
  • 打赏
  • 举报
回复
RegExp.$i?这么做应该得到的是undefined!
建议你试试 RegExp['$'+i]
其它内容未细看。
Linktwelve 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fengyun817 的回复:]
引用 6 楼 linktwelve 的回复:

如果我要replace所有符合正则的要如何写?


指定g即可。以上代码就是全部符合的都替换。
var reg=new RegExp(t,"ig");
[/Quote]
不过后面的正则和前面的有可能不一样,比如验证QQ号码的正则[1-9][0-9]{4,}
字符串"123456879\///abcde987654321"
我要的效果是<here>123456879<here>\///abcde<here>987654321<here>
但是如果像您那样写的话就变成了<here>123456879<here>\///abcde<here>123456879<here>
fengyun817 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 linktwelve 的回复:]

如果我要replace所有符合正则的要如何写?
[/Quote]

指定g即可。以上代码就是全部符合的都替换。
var reg=new RegExp(t,"ig");
Linktwelve 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fengyun817 的回复:]
JScript code

function getreg(a,b)
{
var p=b;
var t="("+a+")";
var reg=new RegExp(t,"ig");
reg.exec(p);//或者p.match(reg); 来更新全局RegExp
p = p.replace(reg,"<here>"+RegExp.$1+"<here>");
alert(p);
……
[/Quote]
如果我要replace所有符合正则的要如何写?
fengyun817 2011-06-23
  • 打赏
  • 举报
回复

function getreg(a,b)
{
var p=b;
var t="("+a+")";
var reg=new RegExp(t,"ig");
reg.exec(p);//或者p.match(reg); 来更新全局RegExp
p = p.replace(reg,"<here>"+RegExp.$1+"<here>");
alert(p);
//document.getElementById("t2").value=p;
}
getreg("a","abab");
fengyun817 2011-06-23
  • 打赏
  • 举报
回复
首先test方法不会修改全局的RegExp,其次没有 RegExp.$+变量的用法。
Linktwelve 2011-06-23
  • 打赏
  • 举报
回复
不过加进去貌似还是没变
Linktwelve 2011-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 li12403074 的回复:]
将这句p.replace(RegExp.$i,"<here>"+RegExp.$i+"<here>");
改为p=p.replace(RegExp.$i,"<here>"+RegExp.$i+"<here>");试试
[/Quote]
额..忘记了
li12403074 2011-06-23
  • 打赏
  • 举报
回复
将这句p.replace(RegExp.$i,"<here>"+RegExp.$i+"<here>");
改为p=p.replace(RegExp.$i,"<here>"+RegExp.$i+"<here>");试试

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧