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

ermaosk 2013-03-05 09:41:29

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

结果为,
请理解的同志帮忙分析一下,多谢
...全文
195 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ermaosk 2013-03-06
  • 打赏
  • 举报
回复
引用 3 楼 zyl_lyr1019 的回复:
第一个的情况,它是因为匹配字符串开始的位置得到的,而这个时候它匹配为空,所以匹配第一个得到的结果就是空,你可以查看一下result的属性,就可以看到具体匹配到哪了。第二个,理论也是差不多的
引用 4 楼 bluemoby 的回复:
首先,这个/j?/和/(j)?/两个表达式的含义都是表示0个或一个j,那么都可以匹配空字符串。 然后,你得理解exec函数的作用,exec函数执行的时候会返回一个数组,数组的第一个元素使匹配的字符串,然后依次是匹配的分组。第一个表达式没有分组,所以只返回了一个元素的数组,这个元素就是匹配的那个空串。而第二个表达式中有一个分组,所以就会返回两个元素的数组,第一个元素使匹配……
多谢两位,头次发帖就有了收获,回头看了一下正则,明白了一些,
bluemoby 2013-03-05
  • 打赏
  • 举报
回复
首先,这个/j?/和/(j)?/两个表达式的含义都是表示0个或一个j,那么都可以匹配空字符串。 然后,你得理解exec函数的作用,exec函数执行的时候会返回一个数组,数组的第一个元素使匹配的字符串,然后依次是匹配的分组。第一个表达式没有分组,所以只返回了一个元素的数组,这个元素就是匹配的那个空串。而第二个表达式中有一个分组,所以就会返回两个元素的数组,第一个元素使匹配的空字符串,第二个元素是当前匹配中分组的内容也是空字符串。所以第二个表达式执行后返回的是两个空串组成的数组。打印出来就会显示两个元素的分割符-逗号。
张运领 2013-03-05
  • 打赏
  • 举报
回复
第一个的情况,它是因为匹配字符串开始的位置得到的,而这个时候它匹配为空,所以匹配第一个得到的结果就是空,你可以查看一下result的属性,就可以看到具体匹配到哪了。第二个,理论也是差不多的
ermaosk 2013-03-05
  • 打赏
  • 举报
回复
引用 1 楼 xiaoqingao 的回复:
?是0次或1次匹配前面的字符 var reg = /j?/g; 你换这样写试下 g是全局匹配
加了g还是一样的效果
放开那个衰锅 2013-03-05
  • 打赏
  • 举报
回复
?是0次或1次匹配前面的字符 var reg = /j?/g; 你换这样写试下 g是全局匹配

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧