# 正则表达式
正则表达式就是一个表达式,用来查找一个有指定【特点】的表达式,规则匹配的。
# 正则表达式定义的方式
```
var reg = /abc/;
var reg = new RegExp('abc');
推荐使用字面量的方式,如同数组和对象一样,推荐使用字面量的创建方式
# 正则表达式使用方法
```
reg.test(str);
str.match(reg);
# 特殊属性 i/g/m
g代表的是global全局匹配
i代表ignoreCase忽略大小写,
m代表multiline多行匹配,
# 特殊字符
具有特殊含义的字符。
\ 转义字符
| 或
## 方括号
```
[abc] 查找方括号内的任意一个字符
[^abc] 查找任何不在方括号内的字符
[0-9] 查找0-9之间的数字
[a-z] 查找任何小写字母
[A-Z] 查找任何大写字母
[A-z] 查找任何字母
(red|blue|green) 查找指定字符串(子表达式)
## 元字符
```
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符
\W 查找非单词字符
\d 查找数字
\D 查找非数字
\s 查找空白字符
\S 查找非空白字符
\b 查找单词边界
\B 查找非单词边界
\n 查找换行符
\f 查找换页符
\r 查找回车符
\t 查找制表符
\v 查找垂直制表符
\uxxx 查找以十六位进制数xxxx规定的Unicode字符
## 量词
以下均遵循贪婪匹配:
n+ 匹配任何包含至少一个n的字符
n* 匹配任何包含0个或多个n的字符
n? 匹配任何0个或一个n的字符
n{X} 匹配X个n的序列字符串
n{X,Y} 匹配X至Y个n的序列字符串
n$ 匹配以n结尾的字符串
^n 匹配任何以n开头的字符串
?=n 匹配任何后面紧接着指定字符串n的字符串
?!n 匹配任何其后没有紧接着指定字符串n的字符串
非贪婪匹配:
n+? n*? ...
## 补充
```
(?:n) 匹配时子表达式中没有这一项(不补获分组)
# RegExp对象属性
global 查看RegExp对象是否具有g标志
ignoreCase 查看RegExp对象是否具有i标志
multiline 查看RegExp对象是否具有m标志
source 查看正则表达式源文本
lastIndex 一个整数标志开始下一次匹配的字符位置(一般与exec一起使用)
# RegExp对象方法
compile 编译正则表达式。 (就是改变这个正则表达式)
exec 检索字符串中指定的值。返回找到的值,并确定其位置。
test 检索字符串中指定的值。返回 true 或 false。
# 字符串方法
search 检索正则表达式相匹配的值
match 查找所有符合正则匹配条件的结果
replace 替换与正则表达式匹配的字符串
split 把字符串分割成数组(注: 用字表达式分割的话会保留子表达式)
```
// 正则表达式实现aabb的形式变成bbaa
// var str = 'aabbccdd';
// var reg = /(\w)\1(\w)\2/g;
// var str1 = str.replace(reg, function($, $1,$2) {
// return $2 + $2 + $1 + $1;
// })
// console.log(str1); //bbaaddcc
// 给10000000000三位打点 变成 10.000.000.000
// var str = '10000000000';
// var reg = /(?=(\B)(\d{3})+$)/g;
// str.replace(reg, '.'); //10.000.000.000
// 字符串去重 aaaaaaaaaaaaaaaaaaaaaabbbbbbbbcccccccccc变成abc
// var str = 'aaaaaaaaaaaaaaaaaaaaaabbbbbbbbcccccccccc';
// var reg = /(\w)\1*(\w)\2*(\w)\3*/g;
// str.replace(reg, function($, $1, $2, $3){
// return $1 + $2 + $3;
// }); //"abc"
// 把the-first-name转换成小驼峰式theFirstName
// var str = 'the-first-name';
// var reg =/-(\w)/g;
// str.replace(reg, function($, $1) {
// return $1.toUpperCase();
// }) //theFirstName
// 匹配结尾的数字
// var str = 'dkfdj1232';
// var reg = /\d$/g;
// str.match(reg); //["2"]
// 统一空格数
// var str = ' fkjdf ';
// var reg = /\s+/g;
// str.replace(reg, ' ');//" fkjdf "
// 判断字符串是不是由数字构成
// var str = 'fdjfd214234234';
// var reg = /(\d*?:[a-zA-Z])/g;
// reg.test(str);// false
// 删除字符串中的空格
//删除前后空格
// var str = ' d kdfjd dfjdkf ';
// var reg = /(^\s*)|(\s*)$/g;
// str.replace(reg, '');//"d kdfjd dfjdkf"
//删除所有空格
// var reg = /(\s*)/g;
// str.replace(reg, '');//"dkdfjddfjdkf"
// 身份证号匹配
// var str = '12345678976543879X';
// var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; //不需要全局匹配
// reg.test(str);
//邮箱地址验证
var str = '[email protected]';
var reg = /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+)+$/;
reg.test(str);