正则表达式的匹配规则
https://www.cnblogs.com/youyouyunduo/p/11706688.html
一些匹配规则
1字面量字符和元字符
- 1.1(/./)点字符匹配
点字符匹配除回车(\r)、换行(\n)、行分隔符(\u2028)、段分隔符(\u2029)以外的所有字符。 - 1.2(/|/)or字符
- 1.3(/$/)开头&结尾位置字符
2转义字符
- '
- `
- ^
- .
- [
- $
- (
- )
- |
- *
- +
- ?
- {
- \
3特殊字符
- \r回车
- \n换行
- \0null
4字符类
字符类class表示有一系列字符可供选择
[xyz]表示x\y\z之中任选一个匹配
1.^ 脱字符 [^xyz]表示除了xyz之外的数据都可以匹配
2.- 连字符,[abc]->[a-c];[0123456789]->[0-9]
连字符出现在方括号内才具备简写的作用
[\u4e00-\u9fa5]:匹配中文
5预定义模式
\d [0-9] 匹配数字
\w [A-Za-z0-9_] 匹配字母数字
\s [ \t\r\n\v\f] 匹配空格
6重复类
{n}:表示恰好重复n此;{n,}表示至少n次,{n,m}表示不少于n次,不多于m次
7量词符都是贪婪模式
?:{0,1} 0次或者1次
+:{1,} 1次或多次
*:{0,} 0次或多次
8非贪婪模式
??
+?
*?
'abb'.match(/ab*/) //['abb'] 匹配尽可能多个b
'abb'.match(/ab*?/) // ["a"] 匹配尽可能少个b
'abb'.match(/ab?/) // ["ab"]
'abb'.match(/ab??/) // ["a"]
9修饰符
i忽视大小写
g全局匹配
m多行匹配,修改^&变成\n
10组匹配
var m = 'abcabc'.match(/(.)b(.)/);
m
// ['abc', 'a', 'c']
/(.)b(.)\1b\2/.test("abcabc")
// true
2.非捕获组
(?:x)
执行exec命令不反悔该组匹配的内容
3.先行断言x(?=y)x只有在y前面才匹配,返回x
var m = 'abc'.match(/b(?=c)/);
// ["b"]
4.先行否定断言x(?|y)x只有不在y前面才匹配返回x
'3.14'.match(/\d+(?!\.)/)
//14
//匹配不在.号前面的数字
// 手机号码的校验
const phoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
// 身份证的校验
const idCardReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
// URL的校验
const urlReg = /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
// 邮箱的校验
const emailReg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
// 日期 YYYY-MM-DD 校验
const dateReg = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/
// 年龄校验
const yearReg = /^(1\d{0,2}|[1-9]\d?)$/