正则表达式:正则表达式最初是科学家对人类神经系统的工作原理的早期研究,现在在编程语言中有广泛的应用。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定的字符串是否符合正则表达式的过滤逻辑(匹配),可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
强大的字符串替换能力(替换)
灵活性、逻辑性和功能性非常的强,可以迅速地用极简单的方式达到字符串的复杂控制,对于刚接触的人来说,比较晦涩难懂
正则表达式由多种字符组成
特殊字符:普通数字,字母,中文,符号,特殊字符(有中文字符和英文字符区别),等等
修饰符:
| i | 执行对大小写不敏感的匹配。 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
| m | 执行多行匹配。 |
常用元字符:
| \d | 匹配至少有一个数字 |
| \D | 匹配至少任意一个非数字的字符 |
| \w | 匹配至少一个字母或数字或下划线 |
| \W | 匹配至少有一个不是字母,数字,下划线 |
| \s | 匹配至少任意的空白符 |
| \S | 匹配至少一个不是空白符的字符 |
| . | 匹配至少有一个非换行符 |
| ^ | 表示匹配行首的文本(以谁开始) |
| $ | 表示匹配行尾的文本(以谁结束) |
常用限定符:
| * | 重复零次或更多次\d* /^ab*$/:表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……); |
| + | 重复一次或更多次\d+ / ab+/:表示一个字符串有一个a后面跟着至少一个b或者更多; |
| ? | 重复零次或一次 /^ab?$/:表示一个字符串有一个a后面跟着零个或者一个b;
|
| {n} | 至少重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
范围匹配和分组等比较特殊的字符:
| [] | 字符串用中括号括起来,表示匹配其中的任一字符,[123]匹配123 |
| - | [1-9]匹配1-9 可以写 a-z A-Z 等等 范围 |
| \ | \的用法 \ 主要是用法是在正则表达式中的特殊符号转换为它本身的意思比如 \- 就可以匹配 - 了 |
| | | 或者 |
| () | 分组 ([1]) | ([2]) |
| [\u4e00-\u9fa5] | 匹配中文 |
| \uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
创建正则:
字面量创建: var reg = /\d/;
构造函数创建 : var reg = new RegExp(/\w/);
正则匹配: 语法: 正则.test('需要匹配的字符串')
效果:如果正则表达式与指定的字符串匹配 ,返回true;否则false
- // 只包含数字
- var a=/^\d+$/
- var str1='1123123123'
- var str2='12a'
- console.log(a.test(str1)); // true
- console.log(a.test(str2)); // false
正则提取: 语法:需要匹配的字符串.match('正则')
效果:查找匹配的 String ,它返回一个数组,在未匹配到时会返回 null。
- // 匹配非数字
- var a=/[^0-9]/g
- let value = '123asdasda'
- var arr = value.match(a)
- console.log(arr); // (7) ['a', 's', 'd', 'a', 's', 'd', 'a']
正则替换: 语法: 需要匹配的字符串.replace('正则',替换值)
比如将字符串的空白,替换为 - 链接
- var str = " 123AD asadf asadfasf adf ";
- var str=str.replace(/\s/g,"-");
- console.log(str);
- // ---123AD--asadf---asadfasf--adf-
替换是将匹配到的字符替换,如果不加修饰符 g ,那么只会替换第一个空白
- var str =str.replace(/^\s+|\s+$/g,"-");
- // 值替换前后的空白
- // -123AD asadf asadfasf adf-
看我的写法也可以看出,替换也是不会改变原字符串的
正则表达式就是突出灵活,需要大家实际应用起来,说不定每次都会发现更好的写法,分享几个正则表达式:
- // 不包含字母
- var reg = /^[^A-Za-z]*$/
- // 时间格式:年月日时分秒
- var reg = /^\d{4}([/:-\S])(1[0-2]|0?[1-9])\1(0?[1-9]|[1-2]\d|30|31) (?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
- // 严格手机号匹配
- var reg = /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/
- // 密码校验,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
- var reg = /^\S*(?=\S{6,})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/
正则表达式深入=》 正则表达式