javascript - 关于正则表达式exec方法全局模式匹配下有个问题
PHP中文网
PHP中文网 2017-04-10 17:09:08
[JavaScript讨论组]

var str="1 plus 2 equal 3";
x=str.match(/\d+/g);

y=/\d+/g.exec(str);
document.write(x+"<br/>");//1,2,3
document.write(y+"<br/>");//1
y=/\d+/g.exec(str);
document.write(y+"<br/>");//1??应该是2??
y=/\d+/g.exec(str);
document.write(y+"<br/>");//1??应该是3啊??

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
巴扎黑
var str="1 plus 2 equal 3";
rex = /\d+/g;
y=rex.exec(str);  // 1
console.log(y);
console.log(rex.lastIndex);
y=rex.exec(str);  // 2
console.log(y);
console.log(rex.lastIndex);
y=rex.exec(str);  // 3
console.log(y);
console.log(rex.lastIndex);

要这样写,你那种写法每次都是一个新的RegExp对象,所以三次调用都是取的第一个匹配结果

ringa_lee
var str="1 plus 2 equal 3";
x=str.match(/\d+/g);
console.log(x);//1,2,3
y=/\d+/g.exec(str);
console.log(y);//1
y=/\d+/g.exec(str);
console.log(y);//1??应该是2??
y=/\d+/g.exec(str);
console.log(y);//1??应该是3啊??

每次执行exec方法是正则表达式都是一个新的和之前的不同,所以它们之间是无关的,匹配的lastIndex也不会传递下去
要想输出其期望的要这样修改:

var str="1 plus 2 equal 3";
x=str.match(/\d+/g);
console.log(x);//1,2,3
var myRegExp=/\d+/g;
y= myRegExp.exec(str);
console.log(y);//1
y= myRegExp.exec(str);
console.log(y);//2
y= myRegExp.exec(str);
console.log(y);//3
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号