// 比零大的叫整数,故而零不是正数,零是整数,最小的自然数,有理数
// 校验大于零的数(含小数)
let positiveNumberReg = /^([1-9][0-9]{0,}(\.[0-9]{1,})?|(0\.[0-9]{1,}))$/
// 校验整数(含有负数)
let integerReg = /^-?\d{1,}$/
// qq号的格式 5-10 位数字
let qqNumReg = /^\d{5,10}$/
// 手机号的格式
let phoneNumReg = /^1\d{10}$/
// 邮箱测试 [0-9a-zA-Z]{1,}\@
// {1,} 的写法相当于 + {0,}的写法相当于 * {0,1}相当于? \d 等价于 [0-9]
let mailAccountReg = /^[0-9a-zA-Z!#$%^&*()_+{}:"<>?|]{1,}\@[a-zA-Z]{1,}(\.[a-zA-Z]{1,})+$/
// 身份证
let idCardNoReg = /^\d{6}(19|20)[0-9]{2}((0[1-9])|1[1-2]|10)((0[1-9]|1[0-9]|2[0-9]|3[0-1])\d{4})$/
let idCardNo = '';
let birthDate = idCardNo.slice(6,14)
// 例如 1998/01/12
let str = (birthDate.slice(0,4)+'/'+birthDate.slice(4,6)+'/'+birthDate.slice(6));
// 匹配圆括号中的正则(含小括号)
let pattern1 = /\(7890\)/ // 例子:56(7890)67 exec的结果:[ '(7890)', index: 2, input: '56(7890)67', groups: undefined ]
let pattern2 = /(?:y|ies)/; // 是不返回结果的 这个写法相当于 /(y|ies)/
// 正向预查 -- 空格用什么表示
let pattern3 = /Windows(?=95|2000|98|xp)/;
// 相当于
let pattern3Transfer = /Windows(95|2000|98|xp)/
// console.log(pattern3Transfer.exec('Windows9'))
// [
// 'Windows95',
// undefined,
// '95',
// index: 0,
// input: 'Windows95',
// groups: undefined
// ]
// 负向预查
let pattern4 = /Windows(?!95|2000|98|xp)/
// 非贪婪模式
let pattern5 = /o+/
let pattern6 = /o+?/
// console.log(pattern5.exec('ooooo')) // [ 'ooooo', index: 0, input: 'ooooo', groups: undefined ]
// console.log(pattern6.exec('ooooo')) // [ 'o', index: 0, input: 'ooooo', groups: undefined ]
// 匹配字符串 匹配 zxy 字符串
let pattern7 = /xyz/
// console.log(pattern7.exec('xyz8'))
// [ 'xyz', index: 0, input: 'xyz8', groups: undefined ]
// 匹配字符串集合 匹配x,y,z 任意一个
let pattern8 = /[xyz]/;
// console.log(pattern8.exec('xyz8'));
// [ 'x', index: 0, input: 'xyz8', groups: undefined ]
// 匹配负值字符集合 匹配未包含的任意字符串
let pattern9 = /[^xyz]/;
// console.log(pattern9.exec('xyz1'))
// [ '1', index: 3, input: 'xyz1', groups: undefined ]
// 匹配字符范围
let pattern10 = /[a-z0-9A-Z]/;
// console.log(pattern10.test(1)) // true
// console.log(pattern10.test('c')) // true
// console.log(pattern10.test('A')) // true
// 匹配负值字符范围
let pattern11 = /[^a-z0-9A-Z]/;
// console.log(pattern11.test(1));// false
// console.log(pattern11.test('c'));// false
// console.log(pattern11.test('A'));// false
// console.log(pattern11.test('*'));// true
// 匹配单词边界
let pattern12 = /er\b/;
// console.log(pattern12.test('er'));// true
// console.log(pattern12.test('teacher'));// true
// console.log(pattern12.test('picture'));// false
// console.log(pattern12.test('every'));// false
// console.log(pattern12.test('error'));// false
// 匹配非单词边界
let pattern13 = /er\B/;
// console.log(pattern13.test('er'));// false
// console.log(pattern13.test('teacher'));// false
// console.log(pattern13.test('picture'));// false
// console.log(pattern13.test('every'));// true
// console.log(pattern13.test('error'));// true
// 由x指明的控制字符 -- 这个不知道怎么用(暂时废弃)
let pattern14 = /\cM/;
// console.log(pattern14.test('Control-M'))
// 数字整数集合 前后写法的意思是一样的
let pattern15 = /\d|[0-9]/
// console.log(pattern15.test(677));// true
// 非数字的集合 前后写法的意思是一样的
let pattern16 = /\D|[^0-9]/
// console.log(pattern16.test(677));// false
// 换页符 前后写法的意思是一样的
let pattern17 = /\f|\x0c|\cL/
// 换行符
let pattern18 = /\n|\x0a|\cJ/
let changeLineStr = `
`
let normalStr = ' ';
// console.log(pattern18.test(changeLineStr));// true
// console.log(pattern18.test(normalStr));// false
// 回车符 -- 这个不知道该怎么匹配
let pattern19 = /\r|\x0d|\cM/
let newStr = `
这是第一行文字
这是第二行文字
`
// console.log(pattern19.test(newStr));
// 匹配任何空白字符
let pattern20 = /\s|[\f|\n|\r|\t|\v]/
let tabStr = ' '
// console.log(pattern20.test(tabStr));// true
// 匹配制表符
let pattern21 = /\t|x09|\cI/
// console.log(pattern21.test(tabStr));// false
// 垂直制表符
let pattern22 = /\v/;
// 匹配包括下划线的单词字符
let pattern23 = /^\w{1,}$/
// console.log(pattern23.test('azA_'));// true
// console.log(pattern23.test('azA_-'));// false
// 匹配任何非单词字符
let pattern24 = /^\W{1,}$/;
console.log(pattern24.test('-'));// true
console.log(pattern24.test('a'));// false
// 匹配十六进制转移值 -- 没看懂,暂时不管
// \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。
其中,邮箱,qq号码,身份证等等都是按照基本格式进行封装的,没有进行特别复杂的处理 [后续给身身份证的正则分段进行说明]