分组: 字符串 "|" 用于分隔供选择的字符
选择的尝试匹配次序是从左到右, 直到发现了匹配项, 就忽略右边的匹配项, 即使它产生了更好的匹配.
- "ab".match(/a|ab/)
- //["a", index: 0, input: "ab"]
上面的匹配即便 ab 更合适但还是只会匹配 a
分组: 使用 () 把单独的项组合成子表达式, 以便可以像处理一个独立的单元那样用 "|","*","+","?" 等来对单元内的项进行处理.
- "abcdef".match(/(ab|cd)+|ef/)
- // ["abcd", "cd", index: 0, input: "abcdef"]
圆括号的另一的作用是在完整的模式中定义子模式. 当一个正则表达式成功地和目标字符串相匹配时, 可以从目标中抽出和圆括号中的子模式相匹配的部分.
- "aaa111".match(/[a-z]*(\d)/)
- // ["aaa1", "1", index: 0, input: "aaa111"]
1 会被抽离出来.
- "abcdef".match(/(ab|cd|ef)+|ef/)
- // ["abcdef", "ef", index: 0, input: "abcdef"]
可以看出在括号内使用选择的情况下只有最后被匹配上的字符才会被抽离出来.
引用: 使用带圆括号的表达式允许在同一正则表达式的后部分引用前面的子表达式. 通过在字符 "\" 后面加一位或多位数字来实现.
数字指定了带圆括号的子表达式在正则表达式中的位置, 是参与计数的左括号的位置.
引用指的并不是模式的引用, 而是指的是与那个模式相匹配的完全相同的字符.
- // 要求字符串两边的引号必须相同
- "hahah".match(/(['"])[^'"]*\1/)
- //["'hahah'", "'", index: 0, input:"'hahah'"]
在正则表达式中可以使用 (?:) 创建不带数字编码的引用.
来源: https://blog.csdn.net/qq_34356563/article/details/77844689