关于邮政编码范围扩展JS函数的两处语法疑问咨询
问题1解答:解构赋值前的逗号作用
这个逗号是数组解构的占位跳过语法。string.matchAll()返回的迭代器,每一次迭代拿到的匹配结果都是一个数组:数组第一个元素是正则表达式匹配到的完整字符串,从第二个元素开始才是各个捕获组匹配到的内容。
你这段代码里不需要用到完整匹配的字符串,所以在解构的第一个位置留空加逗号,直接跳过第一个元素,把第2、第3个元素(也就是两个捕获组的匹配结果)分别赋值给beginStr和endStr,等价于下面的写法:
const matchArr = 每一次迭代拿到的匹配结果数组 const beginStr = matchArr[1] const endStr = matchArr[2]
问题2解答:正则中?:的作用
(?:)是正则的非捕获组语法。
我们平时写的普通括号()是捕获组,会把括号内匹配到的内容单独存入结果数组,占用一个捕获组的序号。而加了?:前缀的括号,只会承担「分组」的功能,不会把内部匹配的内容放进捕获组结果,也不会占用捕获组序号。
你这段代码里的正则/(\d+)(?:-(\d+))?/g,外层(?:-(\d+))的作用是把-加结束数字这一整段作为一个整体,后续的?就可以控制这个整体出现0次或1次(对应有没有邮编范围的情况)。如果这里不加?:,外层括号就会变成普通捕获组,最终的捕获组就会变成3个,你解构拿到的endStr就会是-xxxx这种带横杠的错误内容,后续逻辑也会出错。
内容的提问来源于stack exchange,提问作者user167582
相关产品推荐
相关产品推荐

