正则表达式

Wenn 于 2022-09-14 发布
const reg = /abc/   //创建正则  匹配abc,包含abc即可
const reg = new regExp(/abc/);

//test(); 用作检测是否匹配
const result = reg.test('123abc');  //true
const result = reg.test('123bcd'); //false

//exec(); 
const result = reg.exec('123'); //null
const result = reg.exec('123abc');  //返回数组
/*['abc', index: 3, input: '123abc', groups: undefined]
0: "abc"
groups: undefined
index: 3
input: "123abc"
length: 1
[[Prototype]]: Array(0)*/

元字符

//边界符
//^ 以xx开头
const reg = /^a/;
console.log(reg.test('123abc')); //false
console.log(reg.test('Abc123')); //false
console.log(reg.test('abc123')); //true

//$ 以xx结尾
const reg = /c$/;
console.log(reg.test('123abc')); //true
console.log(reg.test('abc123')); //false

如果^和$同时使用,则具有精确匹配的含义

const reg = /^abc$/; //只能为abc
console.log(reg.test('abc')); //true
console.log(reg.test('aaabbbccc')); //false
console.log(reg.test('abcabc'));  //false

设定某个模式出现的次数,即使字符前的某个字符串出现多次

// * 重复零次或更多次  >=0
const reg = /^ab*c$/;   //此时中间的b可以为多个,且其中的值仅为b
console.log(reg.test('abbbbc')); //true
console.log(reg.test('ac')); //true

const reg = /^a*$/;
console.log(reg.test('')); //true
// + 最少出现一次 >0
const reg = /^a+$/;
console.log(reg.test('')); //false
console.log(reg.test('a')); //true
// ? 出现0次或1次   0||1
const reg = /^a?$/;
console.log(reg.test('')); //true
console.log(reg.test('a')); //true
console.log(reg.test('aa')); //false
// {x}  出现x次,且仅为x次
const reg = /^a{3}$/
console.log(reg.test('aaa')); //true
console.log(reg.test('aa')); //false
// {x,}  出现x次,且不小于x次  >= x
const reg = /^a{3,}$/
console.log(reg.test('aaaa')); //true
console.log(reg.test('aa'));  //false
//{x,y}  出现次数大于等于x次且小于等于y次 
const reg = /^a{3,6}$/
console.log(reg.test('aaaa')); //true
console.log(reg.test('aa')); //false
console.log(reg.test('aaaaaaa')); //false

字符类-字符集合

[abc]===> 匹配中括号中的任意一个

[^abc] ===> 匹配非中括号中的任意一个,取反

const reg = /^[abc]$/;
console.log(reg.test('b')); //true
console.log(reg.test('ac')); //false

const reg = /^[a-z]$/;
console.log(reg.test('g')); //true
console.log(reg.test('xy')); //false

const reg = /^[a-z]{2}$/;
console.log(reg.test('xy')); //true
console.log(reg.test('x')); //false

const reg = /^[a-zA-Z]$/;
console.log(reg.test('X')); //true
console.log(reg.test('b')); //true

const reg = /^[a-zA-Z0-9]$/;
console.log(reg.test('6')); //true
console.log(reg.test('A')); //true

const reg = /^[^a-z]$/;
console.log(reg.test('a')); //false
console.log(reg.test('A')); //true
. 匹配除\n之外的任意单字符
const reg = /^.$/;
console.log(reg.test('A')); //true
console.log(reg.test('\n')); //false
consoel.log(reg.test('ab')); //false
匹配全部字符
const reg = /^(.|\n)$/;
console.log('a'); //true 
console.log('.'); //true

预定义类

// \d ==> [0-9]  预定义数字
const reg = /^\d{4}$/;
console.log(reg.test('1234')); //true
console.log(reg.test('a')); //false

// \D ==> [^0-9]  取非数字
const reg = /^\D$/;
console.log(reg.test('a')); //true
console.log(reg.test('1')); //false

// \w ==> [a-zA-Z0-9_]  数字字母下划线
const reg = /^\w$/;
console.log(reg.test('1')); //true
console.log(reg.test('-')); //false

// \W ==> [^a-zA-Z0-9_] 非数字字母下划线
const reg = /^\W$/;
console.log(reg.test('1')); //false
console.log(reg.test('-')); //true

// \s ==> [''] 空白符
const reg = /^\s$/;
console.log(reg.test('1')); //false
console.log(reg.test('')); //true

// \S ==> [^''] 非空白
const reg = /^\S$/;
console.log(reg.test('1')); //true
console.log(reg.test('')); //false

修饰符

[]具有一定的转义效果

[a|b] ==> 即从a, ,b三者选其一
let str = 'abccd'
str = str.replace(/c/,'*');
console.log(str); //ab*cd

str = str.replace(/c/g,'*');  //全局
console.log(str); //ab**d

let str = 'AabbCcd'
str = str.replace(/c/gi,'*')  //不分大小写
console.log(str); //Aabb**d