正则表达式学习

正则表达式

作为前端的初学者,正在研究正则表达式,写了一点demo和总结。也要感谢孙师兄的教导。
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
正则表达式的特点是:1. 灵活性、逻辑性和功能性非常的强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。3. 对于刚接触的人来说,比较晦涩难懂。

以下是自己写的一些demo

基本符号

demo1 “|”(或)、“^”、“$”

1
2
3
4
5
   //'你''好'
//^ 标记文字的开始 ::start
//$ 标记文字的结束 ::end
var regex = /^你|好$/;
console.log(regex.test('一') === true);

demo2数字单词、空白、反转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    //0-9
var regex = /^\d\d\d\d$/;
console.log(regex.test('1024') === true);
//不为0-9
var regex = /^\D\D\D\D$/;
console.log(regex.test('abcd') === true);
//A-Z a-z 0-9 _
var regex = /^\w\w\w\w$/;
console.log(regex.test('Aasdf0_') === true);
//除\n \r \u2028 \u2029的任意字符
var regex = /^.$/;
console.log(regex.test('a') === true);
//空白符号,比如空格,tab,换行,回行首
var regex = /^\s\s\s\s$/;
//字符串含义是空格,tab,换行 回行首
console.log(regex.test(' \t\n\r') === true);

demo3 区间

1
2
3
4
5
6
7
8
9
   //a到z之间 0到9之间 中到丮之间 任意一个字符
var regex = /^[a-z0-9\u4e2d-\u4e2e]$/;
console.log(regex.test('a') === true);
console.log(regex.test('0') === true);
console.log(regex.test('中') === true);
//方括号括起表示这个字符只要与方括号中任意一个字符匹配即成功
var regex = /^[你好]$/;
console.log(regex.test('你') === true);
console.log(regex.test('好') === true);

demo4 重复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    //'你'可以重复1到3次
var regex = /^你{1,3}$/;
console.log(regex.test('你') === true);
//'啦'至少要重复2次
regex = /^啦{2,}$/;
console.log(regex.test('啦') === false);
//'啦'可以重复1到多次
var regex = /^你好啦+$/;
console.log(regex.test('你好') === false);
console.log(regex.test('你好啦') === true);
//'啦'可以重复0到多次
var regex = /^你好啦*$/;
console.log(regex.test('你好') === true);
//'啦'可以重复0到1次
var regex = /^你好啦?$/;
console.log(regex.test('你好') === true);

demo5 ()基本用途

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   //'我是'这个组不参与分组
var regex = /^(?:我是)(['"])人\1$/;
console.log(regex.test('我是"人"') === true);
var regex = /(一朵)(小花)/;
//执行一次匹配行为
var res = regex.exec('啦一朵小花啦');
//完整被匹配到的字符串
console.log(res[0] === '一朵小花');
//第一个分组
console.log(res[1] === '一朵');
//第二个分组
console.log(res[2] === '小花');
//\1 引用了第一个匹配到的分组的字符串
var regex = /^(['"])一朵小花\1$/;
console.log(regex.test('"一朵小花"') === true);

demo6 flags(i g m)

1
2
3
4
5
6
7
8
9
10
11
12
   //i模式不区分大小写
var regex = /^AbC$/i;
console.log(regex.test('abc') === true);
//g模式,会影响到部分api的行为
var str = '12342345';
//永远从字符串的开头开始匹配
var regex = /\d{4}/;
console.log(regex.exec(str)[0] === '1234');
//m模式 ^匹配到每行开头,$匹配到每行结尾
var regex = /^\d{4}$/mg;
var str = '1234\n2345\r3456';
console.log(regex.exec(str)[0] === '1234');

demo7 构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   var regex = /\.\d\./g;
var str = '123.4..5..6.';
console.log(regex.exec(str)[0] === '.4.');
//书写一个正则表达式匹配ip地址
/*
* (25[0-5] 250-255
* |2[0-4]\d 200-249
* [0-1]\d\d 000-199
* [1-9]?\d) 0-99
* */
var regex = /^(25[0-5]|2[0-4]\d|[0-1]\d\d|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)$/;

var str = '192.0.1.1';
console.log(regex.test(str) === true);