欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RegEx之方括号和小括号加竖线的区别

程序员文章站 2022-06-10 09:33:18
...
正则表达式之方括号和小括号加竖线的区别


问题:
在 javascript 中,我使用下面的一个正则,用来验证电话号码:
      1. 长度是 10 位
      2. 第一位是 7 、8 或 9

var reg_num = /^(7|8|9)\d{9}$/



下面一个是同事推荐使用的:
var reg_num = /^[789]\d{9}$/





回答:
如果只是用来验证,下面的是等价的:
//

      /^(7|8|9)\d{9}$/

      /^[789]\d{9}$/

      /^[7-9]\d{9}$/

//


原因:

(a|b|c) 是正则中的 "OR" ,意思是: "a 或 b 或 c", 尽管方括号也是或的意思,但是小括号提供捕获引用功能。 可以使用 (?:7|8|9) 不捕获引用。

[abc] 是 "单字符集合",意思是 "集合内的任意一个字符 a 或 b 或 c" 。
同时 “单字符集合”为了简写起见,可以使用小横线来表示一个区间,例如: [a-d] = [abcd]
小括号加竖线 则不可以简写。

还有一个原因是,[] 虽然是 or 逻辑的简写,但是只能是匹配单个字符时的或的逻辑。
小括号加竖线,则可以写多个字符或的逻辑匹配:(abc|def)


(7|8|9)[789] 是不等价的,因为前者具有捕获引用功能,而后者没有。
(?:7|8|9)[789] 则是等价。








-


引用:

- http://*.com/questions/9801630/what-is-the-difference-between-square-brackets-and-parentheses-in-a-regex







-