请问这条正则是如何匹配的?

var reg = /^(#\w+)?(\.\w+)?(\w+)/img;
var selector = "#main";
var ret = reg.exec(selector);
var len = ret.length;
ret.forEach(function(item){
        console.log(item);
});

#main和n是如何匹配出来的

井号mai和n是如何匹配出来的?
按我的理解,第一个分组(#w+)匹配出的应该是#main而不是#mai,第三个分组(w+)匹配出的应该是main而不是n

阅读 3k
3 个回答

exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二...个分组

正则问题很多时候都是因为正则逻辑不清晰。
推荐个网站给你:regexper.com
Image

正则表达式在处理验证的时候优先匹配全局的,满足整体,在满足子表达式。reg 在处理selector第一步匹配全局,第二部将全局按照子表达式进行划分区域。没有特殊说明,前面尽可能多的匹配,但至少要留给后面一点东西,就是说,后面至少都该得分。讲#mai 分给第一个表达式,留一个n给最后一个表达式。中间没有匹配到的就是undefined

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题