日期:2014-05-16  浏览次数:20333 次

帮忙解释一下这个正则匹配的结果

<script type="text/javascript">
var reg = /j?/;
var str = "eestjbavascriptest";
var result = reg.exec(str);
alert(result);
</script>

结果为空串,不是null

<script type="text/javascript">
var reg = /(j)?/;
var str = "eestjbavascriptest";
var result = reg.exec(str);
alert(result);
</script>

结果为,
请理解的同志帮忙分析一下,多谢
js 正则

------解决方案--------------------
第一个的情况,它是因为匹配字符串开始的位置得到的,而这个时候它匹配为空,所以匹配第一个得到的结果就是空,你可以查看一下result的属性,就可以看到具体匹配到哪了。第二个,理论也是差不多的
------解决方案--------------------
首先,这个/j?/和/(j)?/两个表达式的含义都是表示0个或一个j,那么都可以匹配空字符串。
然后,你得理解exec函数的作用,exec函数执行的时候会返回一个数组,数组的第一个元素使匹配的字符串,然后依次是匹配的分组。第一个表达式没有分组,所以只返回了一个元素的数组,这个元素就是匹配的那个空串。而第二个表达式中有一个分组,所以就会返回两个元素的数组,第一个元素使匹配的空字符串,第二个元素是当前匹配中分组的内容也是空字符串。所以第二个表达式执行后返回的是两个空串组成的数组。打印出来就会显示两个元素的分割符-逗号。