js中match方法返回值的理解

发布时间 2023-06-14 21:15:55作者: 帅到被人砍的阿豪

我输入的正则为:/^<((?:[a-zA-Z_][\-\.0-9_a-zA-Z]\??[a-zA-Z_][\-\.0-9_a-zA-Z])/去匹配

这个标签的标签名
js中match的返回值如下:

上面这个引发了我的思考有了下面尝试:

let str="<divkdiv id='app'>"
let arr=str.match(/^<((?:[a-zA-Z][\\-\\.0-9a-zA-Z]\\:)?[a-zA-Z][\\-\\.0-9a-zA-Z]*)(?:[k])([a-zA-Z][\\-\\.0-9a-zA-Z]*)/) //输出 ['<divkdiv','div','div']
let arr=str.match(/^<((?:[a-zA-Z][\\-\\.0-9a-zA-Z]\\:)?[a-zA-Z][\\-\\.0-9a-zA-Z]*)[k]([a-zA-Z][\\-\\.0-9a-zA-Z]*)/)  //输出 ['<divkdiv','div','div']
let arr=str.match(/^<((?:[a-zA-Z][\\-\\.0-9a-zA-Z]\\:)?[a-zA-Z][\\-\\.0-9a-zA-Z]*)(k)([a-zA-Z][\\-\\.0-9a-zA-Z]*)/)  //输出 ['<divkdiv','div','k','div']
let arr=str.match(/^<((?:[a-zA-Z][\\-\\.0-9a-zA-Z]\\:)?[a-zA-Z][\\-\\.0-9a-zA-Z]*)k([a-zA-Z][\\-\\.0-9a-zA-Z]*)/)  //输出 ['<divkdiv','div','div']
console.log(arr);

```js
根据结果和多次的验证暂时得出当前看到的结论为:match返回的数组中0索引为匹配到的总体字符串,1索引为第一个()这个分组中匹配到的东西,如果还匹配到了这个第二个那么索引2就是第二个()匹配到的东西
中括号中[]的字符虽然被匹配到但是不会储存,也就是说不会出现在match返回的数组中如果是(?:后面是表达式),那么就算这个()匹配到了东西那么这个东西也不会被保存,不会出现在mtach返回的数组中
上方图片中的groups表示分组,为undefined表示没有找到分组
index表示匹配到第一个字符所在的索引
input表示从哪里拿到的字符串,也就是被取值字符串