概述
- 正则表达式(英语:Regular Expression);
- 本质:用来记录文本规则的代码(为字符串定义规则,为输入内容定义规则!);
- 应用非常广泛,如:表单验证、高级搜索、生化科学(有一定难度,不要求非常熟练,但至少会表单验证)。
- 应用:表单验证;隐藏手机号码:152****8563;可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点:
- 灵活性、逻辑性和功能性非常的强;
- 可以迅速地用极简单的方式达到字符串的复杂控制;
- 对于刚接触的人来说,比较晦涩难懂。
比如: - 匹配国内电话号码:
\d{3}-\d{8}|\d{4}-\d{7};
; - 验证手机号:
/^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$/;
很难记住。
正则表达式声明
- 通过构造函数定义
var 变量名= new RegExp(/表达式/);
- 通过字面量定义(较为常用)
var reg = /表达式/;
console.log(reg); //是对象类型
console.log(reg.test(345));
console.log(/\d/.test(567));(直接使用)
- 正则表达式的组成是:(总结)
- 有一些
普通字符
和元字符
组成,普通字符就是字母和数字,元字符是具有特殊意义的字符。
- 有一些
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
比如 \d
预定义类: 表示数字 [0-9]
test() 方法
- 正则对象方法,检测测试字符串是否符合该规则,返回true和false,参数(待测试的字符串)
- 使用语法:
Boolean = 表达式.test("要验证的内容");
- 如:
console.log(/\d/.test(567));
验证 567 符不符合 \d 的规范
正则内部类(五种)(帮我们写好的工具直接使用)
预定义类
符号 | 含义 | 说明 |
---|---|---|
.(点) | ^$\t | 除了 换行 和 回车 之外的任意字符(“”不行,即非空不行) |
\d | [0-9] | 数字字符 |
\D | [ ^0-9] | 非数字字符 |
\s | [\t\n\x0B\f\r] | 空白字符(空格、回车、tab...) |
\S | [ ^\t\n\x0B\f\r] | 非空白字符 |
\w | [a-zA-Z_0-9] | 单词字符 |
\W | [ ^a-zA-Z_0-9] | 非单词字符 |
console.log(/./.test("\t")); //true
console.log(/./.test("\r")); //false
console.log(/./.test("$")); //true
简单类(正则://中什么特殊符号都不写,和[]的加入)
第一种情况:必须包含完整的(一模一样的)才返回true
/string/.test(“string”);
:必须是完整的,只多不能少;/andy/.test(“andy”);
// true/andy/.test(“andylv”);
// true/andy/.test(“an”);
// false/abc/.test("bca");
//false第二种情况:只要包含里面的任何一个就可以
/[string]/.test(“string”);
//true/[andy]/.test("andy");
// true/[andy]/.test("an");
// true/[andy]/.test("ady");
// true/[andy]/.test("anll");
// true/[andy]/.test("assd");
// true/[andy]/.test("ss");
// false/[3aH8]/.test("ss");
// false
负向类(不能是其中的整体或者一部分)
- 中括号内,前面加个元字符
^
进行取反,不可以全部由括号里面的字符构成;如果有一个字符在中括号内找不到就返回true;否则就返回fanse。
console.log(/[^abc]/.test("a")); //false
console.log(/[^abc]/.test("abc")); //false
console.log(/[^abc]/.test("cbabc")); //false
console.log(/[^abc]/.test("abcd")); //true
console.log(/[^abc]/.test("gg")); //true
-
注意
: 这个符号^
,一定是写到方括号里面。
范围类
- 有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线;
console.log(/[a-z]/.test('1111')); //false
console.log(/[A-Z]/.test('aa')); //false
组合类
- 用中括号匹配不同类型的单个字符。
console.log(/[a-m1-5]/.test("b")) //true
console.log(/[a-z1-5]/.test("12aa32a123")); //true
正则边界重点
-
^
:会匹配行或者字符串的起始位置; -
注
:^在[]中才表示非!这里表示开始; -
$
:会匹配行或字符串的结尾位置; -
^$
在一起,表示必须是这个(精确匹配);
// 边界可以精确说明要什么
console.log(/lily/.test("lilyname")); // true
console.log(/^lily$/.test("lily")); // true
console.log(/^lily$/.test("ly")); // false
console.log(/^andy$/.test("andy")); // true这个的最终意思就是 说, 必须是 andy 这四个字母
量词重点
- 多个字母,重复最后一个
-
*
(贪婪):重复零次或更多(>=0); -
+
(懒惰):重复一次或更多次(>=1); -
?
(占有):重复零次或一次(0||1),要么有,要么没有; -
{}
:重复多少次的意思,可以有多少个,如:您的银行卡密码只能是6位:{6}; - {n}:n次(x=n);
- {n,}:重复n次或更多 (x>=n);
- {n,m}:重复出现的次数比n多但比m少 (n<=x<=m);
符号 | 说明 |
---|---|
* | {0,} |
+ | {1,} |
? | {0,1} |
() | 提高权限,有限计算 |
-
x|y
,表示x或者y(没有&,用的是,代替的)
console.log(/^a*$/.test("a")); //true
console.log(/^a*$/.test("")); //true
console.log(/^a*$/.test("d")); //false
console.log(/^a*$/.test("aa")); //true
console.log(/^a*$/.test("aaaaaa")); //true
常用的正则表达式
1.验证QQ号:/^[1-9][0-9]{4,}$/
2.验证手机号:/^((13[0-9])|(15[^4,\D])|(18[0-9]))\d{8}$/
3.验证邮箱:/^[\w\-\.]+\@[\w]+\.[\w]{2,4}$/
4.验证座机号:/^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/
5.验证用户名:/^[a-zA-Z0-9_-]{3,16}$/
6.验证密码:/^[\$a-zA-Z0-9_-]{6,18}$/
- 匹配密码强度
/^([a-z].*[A-Z])|([A-Z].*[a-z])$/
区分大小写英文字母
/^([a-z].*[0-9])|([A-Z].*[0-9])|[0-9].*[a-zA-Z]$/
带有字母 和 数字
/^[A-Za-z0-9]+[_$][A-Za-z0-9]*$/
字母数字中间 加有下划线(想要什么中括号中加)
案例:
- 匹配座机号
var regexp = /^(0\d{2}-\d{8})|(0\d{3}-\d{7})$/;
var demo = /^0\d{2}-\d{8}$|^0\d{3}-\d{7}$/;
- 匹配中文
( /^[\u4e00-\u9fa5]{2,4}$/ )
- 匹配验证表单(注册QQ)
三个函数
replace 函数
-
replace()
方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 - 语法格式:(返回值是新字符串)
str2 = str1.replace(正则式/字符串,替换的目标字符)
str2 = str1.replace(/需要替换的/ig,'替换成');
i:忽略大小写;
g:全局替换。
正则表达式的匹配模式支持的2个标志
g:表示全局模式(global),即模式将被应用于所有字符串而非发现一个而停止;
i:表示不区分大小写(ease-insensitive)模式,在确定匹配想时忽略模式与字符串的大小写
search()函数:给字符查索引
var str = "abcdefg";
console.log(str.search(/bc/));
console.log(str.indexOf("bc"));
//结果都是1
封装自己的trim 函数(IE678不支持原生trim)
function trim(str) {
return str.replace(/(^\s+)|(\s+$)/g,""); // 去掉前面和后面的空格
}