正则匹配时,出现的一个奇怪的问题。
我申明了一个正则对象: var regex = /(^data-)?(.+)/gi;
然后用这个对象匹配data-属性。
第一次使用的时候是正常的,但是第二次直接使用上面已经申明过的正则对象 regex 就会出错。
一开始我认为是第一次使用之后,regex对象的值发生了变化,但是控制台输出出来是两个都是一样的。
我感觉应该是和regex的数据类型为引用类型有关,但又说不出个理由来。
var regex = /(^data\-)?(.+)/gi;
console.log(regex);
var nName = "data-mobile";
var namesOfNode = regex.exec(nName);
console.log(namesOfNode);
console.log(regex);
var regex = /(^data\-)?(.+)/gi;
// 加上这行代码就正常匹配,
// namesOfNode : ["data-account-name", "data-", "account-name", index: 0, input: "data-account-name"]
// 去掉就会出错,变成
// namesOfNode : ["t-name", undefined, "t-name", index: 11, input: "data-account-name"]
nName = 'data-account-name';
namesOfNode = regex.exec(nName);
console.log(namesOfNode);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是
exec
因为在全局模式下,在匹配后,正则对象的lastIndex
属性发生了变化,即设置为匹配文本的最后一个字符的下一个位置。所以当你需要使用同一正则对象匹配时,解决方法:
g
标志lastIndex
为 0这里演示第二种方法
结果如下:
这就正常了