RegEx之方括号和小括号加竖线的区别
程序员文章站
2022-06-10 09:33:18
...
正则表达式之方括号和小括号加竖线的区别
问题:
在 javascript 中,我使用下面的一个正则,用来验证电话号码:
1. 长度是 10 位
2. 第一位是 7 、8 或 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
-
问题:
在 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
-
下一篇: php如何生成随机密码的几种方法
推荐阅读