看正则表达式的文档,对于match的返回值,说的很官方:
存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
那最后match之后,返回值是什么结果呢? 我们通过debugger,也能够很快确定下来。
为了今后开发的时候减少调试,对此细节做个记录,以后只要一看,就能知道该取数组的哪个值了。
下面的例子是读取cookie
example: var key = "username";
var reg =new RegExp("(^| )"+key+"=([^;]*)(;|$)");
var arr= document.cookie.match(reg);
返回值 arr = ["username=aaaa;", "", "aaaa", ";", index: 0, input: "username=aaaa; mycookie"]
分析: arr[0] 是通过正则表达式匹配到的所有字符串。
arr[1-3] 是正则表达式分段匹配出来的值
"" =======(^| )
"aaaa" =======([^;]*)
";"===========(;|$)
index:0 通过正则表达式查找到的内容,在总字符串中匹配到的索引位置
input: 提供进行正则表达式匹配的字符串(match()的调用者)
总结: 根据上面的实践,得出以下结论。 在正则表达式匹配时,如果需要第i个子表达式的值,则直接取结果数组中第i个值。
用上面的例子来表达就是 arr[i]=(j);
i表示数组索引,j表示子正则表达式的从左到右的计数(第j个子表达式),i=j。