一个正则问题 alert(/([0-9]+)(-?)([0-9]+)/.test("021-sfdfdf"));alert(RegExp.$1);alert(RegExp.$2);alert(RegExp.$3);我想返回结果是false,但怎么是true呢,$1,$2,$3的结果也很奇怪 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 true021正则会像正确的匹配所以([0-9]+)匹配到了02(-?)匹配到了空([0-9]+)匹配到了1021就已经完成匹配了弹出的结果页是正确的 alert(/^([0-9]+?)(-?)([0-9]+?)$/.test("021-sdf"));匹配开始和结束,另外使用非贪婪模式 正则表达会匹配所有正确的alert("021-sfdfdf".match(/([0-9]+)(-?)([0-9]+)/));碰到这样的问题,直接这样就可以看出你匹配出来的是什么,很容易纠错。RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个子匹配字符串,以此类推var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正则表达式 匹配出生日期(简单匹配) r.exec('1988-10-10');s1=RegExp.$1;s2=RegExp.$2;s3=RegExp.$3;alert(s1+" "+s2+" "+s3)//结果为1988 10 10 首先你的alert(/([0-9]+)(-?)([0-9]+)/.test("021-sfdfdf"));按你意思应该是alert(/^([0-9]+)(-?)([0-9]+)$/.test("021-sfdfdf"));其次回答一下你这句为什么匹配到2就停了呢,在没有指定非贪婪的情况下,+号或*号应该最大匹配才对呀021-sfdfdf([0-9]+)(-?)([0-9]+)0-9+尽可能多的匹配,结果021,然后发现-,不是0-9范围的,匹配结束,尝试后面的(-?)匹配到了-,匹配成功,继续,发现时s不是-,因为前面[0-9]+,这个贪婪模式,是允许回溯的,所以,这里产生回溯,回到上一个0-9的状态匹配点[0-9]+匹配02,(-?)尝试匹配1失败,因为允许回溯0或1次,所以继续查看后续表达式,([0-9]+)可以捕获到1了。回溯,-?匹配0次。最终结果就是([0-9]+) -> 02(-?) -> 匹配0次([0-9]+) -> 1 急问:JS如何展开某一项 如何替换最后一个匹配的字符串(在线等候) 从基础开始学js该买什么书来学?? JS能实现A页面动态生成新页面B然后弹出吗? 我怎样获取JavaScript读取的数据? 急問題 ----为什么值总是为空(javascript)---- 如何在一个下拉框load完了后执行一个javascript函数 如何3秒后自动关闭 这种正则如何理解呢 在js中如何将GB2312字符集和UTF-8字符集,两者通用的转换函数,急~~~~~~~~ 关于js代码的写法问题???
021正则会像正确的匹配所以([0-9]+)匹配到了02
(-?)匹配到了空
([0-9]+)匹配到了1021就已经完成匹配了弹出的结果页是正确的
alert(/^([0-9]+?)(-?)([0-9]+?)$/.test("021-sdf"));匹配开始和结束,另外使用非贪婪模式
RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个子匹配字符串,以此类推var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正则表达式 匹配出生日期(简单匹配)
r.exec('1988-10-10');
s1=RegExp.$1;
s2=RegExp.$2;
s3=RegExp.$3;
alert(s1+" "+s2+" "+s3)//结果为1988 10 10
alert(/([0-9]+)(-?)([0-9]+)/.test("021-sfdfdf"));
按你意思应该是
alert(/^([0-9]+)(-?)([0-9]+)$/.test("021-sfdfdf"));其次回答一下你这句
为什么匹配到2就停了呢,在没有指定非贪婪的情况下,+号或*号应该最大匹配才对呀
021-sfdfdf
([0-9]+)(-?)([0-9]+)
0-9+尽可能多的匹配,结果021,然后发现-,不是0-9范围的,匹配结束,尝试后面的
(-?)匹配到了-,匹配成功,继续,发现时s不是-,因为前面[0-9]+,这个贪婪模式,是允许回溯的,所以,这里产生回溯,回到上一个0-9的状态匹配点
[0-9]+匹配02,(-?)尝试匹配1失败,因为允许回溯0或1次,所以继续查看后续表达式,([0-9]+)可以捕获到1了。回溯,-?匹配0次。最终结果就是
([0-9]+) -> 02
(-?) -> 匹配0次
([0-9]+) -> 1