定义方式
// 定义一个正则表达式有两种方式:
let reg1 = new RegExp(/abc/);
let reg2 = /abc/;
// 但我们平时使用的方式还是第二种,就像我们初始化一个数组的时候是使用第一种而不是第二种的构造式
let ary1 = new Array(1,2,3);
let ary2 = [1,2,3];
匹配包含固定字符串
首先来一个最简单的正则,匹配包含字符串abc
let reg = /abc/;
console.log( reg.test( 'ab' ) ); // false
console.log( reg.test( 'ac' ) ); // false
console.log( reg.test( 'abc' ) ); // true
console.log( reg.test( 'abcd' ) ); // true
// 'abc'必须是连续的,'acbd'也是不可以
console.log( reg.test( 'acbd' ) ); // false
开始和结束的边界符 ^ $
匹配输入字符串的开始位置:^
匹配输入字符串的结束位置:$
let reg1 = /^abc/; // 匹配以 abc 字符串为开始的字符
let reg2 = /abc$/; // 匹配以 abc 字符串为结尾的字符
let reg = /^abc$/; // 精确匹配字符串必须是 abc
console.log(reg.test( 'abc' )); // true
console.log(reg.test( 'abcd' )); // false
console.log(reg.test( 'aabcd' )); // false
console.log(reg.test( 'abcabc' )); // false
字符类
[]
:表示有一系列字符可供选择,只要匹配其中一个就可以了
let reg = /[abc]/; // 只要包含abc中的任意一个字符就可以匹配
console.log( reg.test('andy') ); // true
console.log( reg.test('baby') ); // true
console.log( reg.test('color') ); // true
console.log( reg.test('red') ); // false
[]
配合 边界符 ^ $
// 只有是 a 或者 b 或者 c 这三个字符 才返回true
let reg = /^[abc]$/;
console.log( reg.test('aa') ); // false
console.log( reg.test('a') ); // true
console.log( reg.test('b') ); // true
console.log( reg.test('c') ); // true
console.log( reg.test('abc') ); // false
console.log( reg.test('cr') ); // false
字符组合
// 26个英文字符大小写都可以,但是[]里面是“或”的关系,只能有一个字符
let reg = /^[a-zA-Z0-9_-]$/;
console.log( reg.test( 'a' ) ); // true
console.log( reg.test( 'A' ) ); // true
console.log( reg.test( '5' ) ); // true
console.log( reg.test( '_' ) ); // true
console.log( reg.test( '-' ) ); // true
console.log( reg.test( '!' ) ); // false
中括号里面字符 ^ 的用法
// 对比上面的正则,在中括号里面加入 ^ 符号,意思是:取反
let reg = /^[^a-zA-Z0-9_-]$/;
console.log( reg.test( 'a' ) ); // false
console.log( reg.test( 'A' ) ); // false
console.log( reg.test( '5' ) ); // false
console.log( reg.test( '_' ) ); // false
console.log( reg.test( '-' ) ); // false
console.log( reg.test( '!' ) ); // true
量词符
*
:字符出现0、1、2、3…n次
let reg = /^a*$/; // *:0次 或者 n次
console.log( reg.test('') ); // true
console.log( reg.test('a') ); // true
console.log( reg.test('aaa') ); // true
+
:字符出现1次以上
let reg = /^a+$/;
console.log( reg.test('') ); // false
console.log( reg.test('a') ); // true
console.log( reg.test('aaa') ); // true
?
:字符出现1次或者0次
let reg = /^a?$/;
console.log( reg.test('') ); // true
console.log( reg.test('a') ); // true
console.log( reg.test('aaa') ); // false
大括号的使用
{3}
:字符出现3次
{3,}
:字符出现3次或者3次以上
{3,10}
:字符出现3次到10次之间,包含3次和10次
注意:{3, 10}
这种写法是错误的,3和10之间不能有空格
// {3} 重复3次
let reg = /^a{3}$/; // 相当于 /^aaa$/
console.log( reg.test('') ); // false
console.log( reg.test('a') ); // false
console.log( reg.test('aaa') ); // true
console.log( reg.test('aaaa') ); // false
// {3,} 大于等于3次
let reg = /^a{3,}$/;
console.log( reg.test('') ); // false
console.log( reg.test('a') ); // false
console.log( reg.test('aaa') ); // true
console.log( reg.test('aaaa') ); // true
// {3, 16} 大于等于3次 并且 小于等于16次
let reg = /^a{3,6}$/;
console.log( reg.test('') ); // false
console.log( reg.test('a') ); // false
console.log( reg.test('aaa') ); // true
console.log( reg.test('aaaa') ); // true
console.log( reg.test('aaaaaa') ); // true
console.log( reg.test('aaaaaaa') ); // false