正则表达式 /(hi)?/g 的含义?

下面正则表达式的含义?

() 是捕获组

? 出现 0 次或 1 次的内容

但为什么会匹配成两个值?

var re = /(hi)?/g;
console.log(re.exec("hi"));  // ["hi", "hi"]

加? 与不加? 的区别:

不加则为null:
r=/(a)/g
r.exec('www')   // null

有?情况:
r=/(a)?/g
r.exec('www')  // ["", undefined, index: 0, input: "www", groups: undefined]

只有?的情况:
r=/a?/g
r.exec('www')  // ["", index: 0, input: "www", groups: undefined]

匹配零次
r=/,{0}/g
r.exec('www')  // ["", index: 0, input: "www", groups: undefined]

匹配零次为什么总能成功?

阅读 2k
2 个回答

第一个问题

regexObj.exec(str)返回结果中,数组[0],表示正则匹配到的字符, 数组[1~n] 表示匹配到的组(括号内匹配的内容)

改一下这个例子更好理解

clipboard.png

regexObj.exec(str)

第二个问题

? 表示匹配 0 个或 1 个,你的表达式 /(a)?/g/a?/g 匹配 0 个或者 1 个 a,www符合这个表达式,只不过匹配到的结果为空

regexp
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题