let regexStr = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
let param = [
"#ffbbad",
"#Fc01DF",
"#FFF",
"#ffE"
]
let paramStr = "#ffbbad #Fc01DF #FFF #ffE";
for (let i = 0; i < param.length; i++) {
console.log(param[i], regexStr.exec(param[i]));
}
console.log("paramStr", paramStr.match(regexStr));
这个正则表达式俩个结果输出的不一样
按照数组循环输出的结果为
#ffbbad true
#Fc01DF false
#FFF true
#ffE false
按照字符串的输出结果为
paramStr [ '#ffbbad', '#Fc01DF', '#FFF', '#ffE' ]
结果就是字符串全部匹配到了,但是数组的却俩个没有匹配到,这是什么原因呢?
g
标识之后,这个正则就是全局模式lastIndex
属性,记录上次匹配之后的位置lastIndex
就会是字符长度也就是 7,那么之后的字符串都不超过 7 个字符,也就是 没有要匹配的内容,所以自然就匹配不到了lastIndex
被重置为 0,下一次就又匹配到了参考阅读:MDN regexp.lastIndex