<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正则

解决方案 »

  1.   

    ?是0次或1次匹配前面的字符
    var reg = /j?/g;
    你换这样写试下 g是全局匹配
      

  2.   

    第一个的情况,它是因为匹配字符串开始的位置得到的,而这个时候它匹配为空,所以匹配第一个得到的结果就是空,你可以查看一下result的属性,就可以看到具体匹配到哪了。第二个,理论也是差不多的
      

  3.   

    首先,这个/j?/和/(j)?/两个表达式的含义都是表示0个或一个j,那么都可以匹配空字符串。
    然后,你得理解exec函数的作用,exec函数执行的时候会返回一个数组,数组的第一个元素使匹配的字符串,然后依次是匹配的分组。第一个表达式没有分组,所以只返回了一个元素的数组,这个元素就是匹配的那个空串。而第二个表达式中有一个分组,所以就会返回两个元素的数组,第一个元素使匹配的空字符串,第二个元素是当前匹配中分组的内容也是空字符串。所以第二个表达式执行后返回的是两个空串组成的数组。打印出来就会显示两个元素的分割符-逗号。