`

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://stackoverflow.com/questions/9801630/what-is-the-difference-between-square-brackets-and-parentheses-in-a-regex







-


分享到:
评论

相关推荐

    正则表达式regex chm文档

    3. **字符类**:使用方括号`[]`定义一个字符集,如`[abc]`匹配'a'、'b'或'c'。你也可以用`-`来表示范围,如`[a-z]`匹配所有小写字母。 4. **分组与引用**:圆括号`( )`用于创建分组,可以捕获和重用子模式。`\数字`...

    正则表达式详细教程加测试工具

    4. **分组**:使用小括号()来分组表达式,可以进行子匹配和重复。 5. **预查**:使用(?=)正向预查和(?!负向预查)来匹配后面跟着或不跟着特定模式的字符串。 6. **选择器**:使用竖线|来选择匹配多个模式中的任意一...

    Java正则表达式详解.doc

    为了更精确地匹配,可以使用方括号来指定有意义的字符集,如`t[aeio]n`将只匹配“tan”、“ten”、“tin”和“ton”。 **1.3 “或”符号** 在某些情况下,可能需要匹配多个选项中的任意一个。这种情况下可以使用...

    正则表达式

    通过使用方括号`[]`可以创建一个字符集,匹配其中的任意一个字符。 **示例:** ```csharp string input = "HeLlo"; Regex regex = new Regex(@"[HL]"); Match match = regex.Match(input); Console.WriteLine(match...

    正则表达式学习视频

    2. 字符集合:使用方括号([])定义一个字符集,如[a-z]匹配所有小写字母。 3. 范围字符:在字符集中使用破折号(-)定义一个范围,如[0-9]匹配所有数字。 4. 量词:除了星号,还有加号(+)表示至少一次,问号(?)表示...

    正规则表达式编辑工具

    )、竖线(|)、花括号({})、方括号([])、圆括号(())等。 2. **匹配字符**: - 点号(.):匹配任意单个字符,除了换行符。 - 星号(*):匹配前面的字符0次或无限次。 - 加号(+):匹配前面的字符1次或...

    Regular Expression

    1. **字符类(Character Class)**:使用方括号`[]`定义一个字符类,表示匹配其中任意一个字符。例如,`[abc]`匹配'a'、'b'或'c'。 2. **量词(Quantifiers)**:用来指定前面的字符或字符类出现的次数。例如,`*`...

    Java正则表达式详解

    如 "t[abcd]n" 只会匹配 "tan"、"tbn"、"tcn" 和 "tdn",不会匹配 "thn" 或 "tabn",因为它们包含不在方括号内的字符。 3. **竖线** `|`:表示逻辑或,用于指定多个可能的匹配项。例如,`t(a|b|c|dd)n` 只会匹配 ...

    正则表达式工具.rar

    - 范围:用方括号`[]`表示匹配其中的任意一个字符。 - 选择:用竖线`|`表示或关系,匹配其左右两边的任一表达式。 - 重复:`{n}`表示精确匹配n次,`{n,}`表示至少匹配n次,`{n,m}`表示匹配n到m次。 - 非贪婪匹配:在...

    C# 正则表达式

    - **字符类**:使用方括号(`[]`)来定义一系列字符,匹配方括号中任何一个字符,例如 `[a-zA-Z]` 匹配任何小写或大写的英文字母。 - **重复字符类**:如 `+` 表示前面的字符或表达式一次或多次出现,`{n}` 指定前面...

    经典的正则比对工具

    - **字符类**:用方括号 `[]` 包裹的一组字符,表示匹配其中的任意一个字符。 - **边界匹配器**:如 `^` 表示字符串的开始,`$` 表示字符串的结束,`\b` 表示单词边界。 2. **正则表达式语法** - **分组与反向...

    Regular expressions

    3. **字符类**:使用方括号`[]`定义一个字符集,如`[abc]`匹配'a'、'b'或'c'。使用`^`在字符类内否定,如`[^abc]`匹配除'a'、'b'、'c'之外的任何字符。 4. **分组与引用**:使用圆括号`()`创建分组,可以捕获和引用...

    正则表达试编辑器,编写正则表达式

    - **字符类**:用方括号`[]`定义一组字符,如`[abc]`匹配'a'、'b'或'c'。 - **范围**:在字符类中用`-`表示范围,如`[a-z]`匹配小写字母。 - **转义字符**:`\`用于转义特殊字符,如`\.`匹配点号本身。 - **分组与...

    Expressions13

    4. **字符类**:方括号([])内列举的字符,表示匹配其中任意一个字符。 5. **分组与引用**:圆括号()用于创建子模式,可以对子模式进行引用或反向引用。 6. **边界匹配器**:^匹配行首,$匹配行尾,\b匹配单词边界,\...

    正则表达式检查小工具

    1. **字符集(Character Set)**:通过方括号`[]`定义一组字符,如`[abc]`匹配任意一个'a'、'b'或'c'。 2. **量词(Quantifiers)**:用来指定前面的元素出现的次数,例如`*`表示零次或多次,`+`表示一次或多次,`?...

    正则表达式.rar

    3. **字符类(Character Classes)**:用方括号`[]`定义一个字符类,表示匹配其中任何字符。例如,`[abc]`匹配'a'、'b'或'c',`[^abc]`匹配除了'a'、'b'、'c'之外的任何字符。 4. **分组(Groups)**:使用圆括号`...

    最好用的正则帮助CHM

    3. **字符类**:用方括号`[]`定义一个字符类,如`[abc]`匹配'a'、'b'或'c'。还可以使用短划线`-`表示范围,如`[a-z]`匹配所有小写字母。 4. **量词**:`*`、`+`、`?`分别表示匹配前面的字符零次、一次或多次、零次...

Global site tag (gtag.js) - Google Analytics