正则global双次调用无效的问题大家碰到过么?

fengwusan 2017-12-24 11:33:40

var pattern = /<a[^<>]+href=('|")([^'"]*forum\.php\?mod=forumdisplay&(amp;)?fid=[^'"]*)\1[^<>]*>([^<>]+)<\/a>/gi;
console.log(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));
console.log(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));
console.log(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));
console.log(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));

返回
true
false
true
false

var pattern = /<a[^<>]+href=('|")([^'"]*forum\.php\?mod=forumdisplay&(amp;)?fid=[^'"]*)\1[^<>]*>([^<>]+)<\/a>/gi;
WScript.Echo(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));
WScript.Echo(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));
WScript.Echo(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));
WScript.Echo(pattern.test("<h2><a href=\"forum.php?mod=forumdisplay&fid=38\">时评人家</a></h2>"));

返回
-1
0
-1
0
怎么会出现这样的bug,难道是脚本引擎的问题吗?不过ms和n8都是这样处理这种问题的,没有/g就不会有这个问题。
...全文
426 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengwusan 2017-12-26
  • 打赏
  • 举报
回复
大概是这样的,看来得写两个正则,一个test一个match
bhbhxy 2017-12-24
  • 打赏
  • 举报
回复
这不是bug,规范就是这么定义的。 如果正则表达式设置了全局标志,test() 的执行会改变正则表达式 lastIndex属性。连续的执行test()方法,后续的执行将会从 lastIndex 处开始匹配字符串
var regex = /foo/g;

// regex.lastIndex is at 0
regex.test('foo'); // true

// regex.lastIndex is now at 3
regex.test('foo'); // false
如果 lastIndex 等于字符串的长度,且该正则表达式不匹配空字符串 ,则该正则表达式不匹配字符串,lastIndex 被设置为 0,于是再一次测试又为true。

87,907

社区成员

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

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