一个关于正则表达式的诡异问题
时间:2011-12-12
来源:互联网
JScript code
var reg=/^(.+?):(.+)$/gi,s='a:a',c,cfg; alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a c=s.replace(reg,'$1'); alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么????? if(reg.test(s))cfg=s.replace(reg,'$2');
为什么在第一次replace后再测试就为false????
作者: loveajin 发布时间: 2011-12-12
应该是在s的基础上替换,s的值就变了吧。虽然,你又把这个值给了c,但是给c的值应该是你替换之后的s的值。
作者: soonfei 发布时间: 2011-12-12
作者: cj205 发布时间: 2011-12-12
作者: soonfei 发布时间: 2011-12-12
替换之后,你再输出一下s试试看看是多少。
应该是在s的基础上替换,s的值就变了吧。虽然,你又把这个值给了c,但是给c的值应该是你替换之后的s的值。
代码中弹出了,格式是reg.test()+reg.source+s;弹出的内容都注释出来了
作者: loveajin 发布时间: 2011-12-12
g去掉呗。。
问题是第一次测试是true,第二次却是false……,求内幕
作者: loveajin 发布时间: 2011-12-12
g去掉呗。。
是的。学习了。
作者: soonfei 发布时间: 2011-12-12
JScript code
var reg=/^(.+?):(.+)$/i,s='a:a',c,cfg; alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a //c=s.replace(reg,'$1'); alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么????? //if(reg.test(s))cfg=s.replace(reg,'$2'); 或者 var reg=/^(.+?):(.+)$/gi,s='a:a',c,cfg; alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a //c=s.replace(reg,'$1'); reg.compile() alert(reg.test(s)+' '+reg.source+' '+s);//弹出false ^(.+?):(.+)$ a:a,为什么????? //if(reg.test(s))cfg=s.replace(reg,'$2');
作者: hookee 发布时间: 2011-12-12
要么去掉g,要么 重新complie
JScript code
var reg=/^(.+?):(.+)$/i,s='a:a',c,cfg;
alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
//c=s.replace(reg,'$1');
alert(reg.test(s)+' '+reg.source+'……
高人能否指点一下,我只知道g是全文匹配,为什么要去掉才对?不去掉为什么要重新编译?replace用'$n'的方式修改了正则表达式什么地方?
作者: loveajin 发布时间: 2011-12-12
引用 7 楼 hookee 的回复:
要么去掉g,要么 重新complie
JScript code
var reg=/^(.+?):(.+)$/i,s='a:a',c,cfg;
alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
//c=s.replace(reg,'$1');
alert(reg……
应该和replace没有关系
全局匹配,先多第一个a开始,再从第二个a开始。第一个正好符合,为true.第二个不复合,为false.然后就这样循环。一直是true、false、true、false、true、false、true、false、……
高手们,我说的对不对?
作者: soonfei 发布时间: 2011-12-12
引用 7 楼 hookee 的回复:
要么去掉g,要么 重新complie
JScript code
var reg=/^(.+?):(.+)$/i,s='a:a',c,cfg;
alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
//c=s.replace(reg,'$1');
alert(re……
作者: cj205 发布时间: 2011-12-12
引用 8 楼 loveajin 的回复:
引用 7 楼 hookee 的回复:
要么去掉g,要么 重新complie
JScript code
var reg=/^(.+?):(.+)$/i,s='a:a',c,cfg;
alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):(.+)$ a:a
//c=s.replac……
作者: cj205 发布时间: 2011-12-12
要么去掉g,要么 重新complie
JScript code
var reg=/^(.+?):(.+)$/i,s='a:a',c,cfg;
alert(reg.test(s)+' '+reg.source+' '+s);//弹出true ^(.+?):……
谢谢老大,再请问是不是一共只有一个正则表达式全局对象,还是没定义一个正则表达式对象都会生成一个全局对象?
作者: loveajin 发布时间: 2011-12-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28