正则表达式
什么是正则表达式
正则表达式是用于匹配字符串中字符组合模式。在javascript中,正则表达式也是对象。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,例如表单验证:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或字符串中获取我们想要的特定部分(提取)等。
正则表达式的特点
- 灵活性,逻辑性和功能性非常的强。
- 可以迅速地用简单的方式达到字符串的复杂控制。
- 对于刚接触的人来说比较晦涩难懂。比如:^\w+([-+.]\w+)@\w+([-.]\w+)$。
- 实际开发,一般都是复制写好的正则表达式,但是要求会使用正则表达式并且根据实际情况修改正则表达式.比如用户名:/^[a-z0-9_-]{3,16}$/。
创建正则表达式
在 javascript 中,可以通过两种方式创建一个正则表达式。
通过调用 RegExp 对象的构造函数创建。
var 变量名 = new RegExp(/表达式/);
通过字面量创建
var 变量名 = /表达式/;
测试正则表达式 test 方法
test()正则对象方法,用于检测字符串是否符合规则,该对象会返回 true 或 false,其参数是测试字符串。
regexobj.test(str)
- regexobj 是写的正则表达式
- str 我们要测试的文本
- 就是检测 str 文本是否符合我们写的正则表达式规范。
正则表达式中的特殊字符
正则表达式的组成
一个正则表达式可以由简单的字符构成,比如/abc/,也可以是简单和特殊字符的组合,比如/ab*c/。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如、$、+等。
边界符
- ^:表示匹配首行的文本(以谁开始)
- $:表示匹配行尾的文本(以谁结束)
代码示例:
//边界符
var reg = /^abc/;
console.log(reg.test("abc"));
console.log(reg.test("aabc"));
console.log(reg.test("abcabc"));
var result = /^abc$/;
console.log(result.test("abc"));
console.log(result.test("abcabc"));
字符类
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。
[-]方括号内部 范围符-
代码示例:
//字符类:[]表示由一系列字符可供选择,只要匹配其中一个就可以
//只要包含a和b或者c都行
var res = /[abc]/;
console.log(res.test("abc"));
console.log(res.test("aredf"));
console.log(res.test("blue"));
console.log(res.test("color"));
console.log(res.test("red"));
//三选一只有a和b或者c才返回true
var res2 = /^[abc]$/;
console.log(res2.test("a"));
console.log(res2.test("b"));
console.log(res2.test("b"));
console.log(res2.test("abc"));
//匹配26个字母当中任何一个(不包括大写26个字母) 返回true
var res3 = /^[a-z]$/;
console.log(res3.test("a"));
console.log(res3.test("e"));
console.log(res3.test("f"));
console.log(res3.test("A"));
- 字符组合
/^[a-zA-Z0-9_-]$/
- [^]方括号内部 取反符^
/^[^abc]$
代码示例:
//字符组合
var res4 = /^[abcA-z_-]$/;
console.log(res4.test("a"));
console.log(res4.test("A"));
console.log(res4.test("_"));
console.log(res4.test("-"));
console.log(res4.test("!"));
//取反字符组合
var res4 = /^[^abcA-z_-]$/;
console.log(res4.test("a"));
console.log(res4.test("A"));
console.log(res4.test("_"));
console.log(res4.test("-"));
console.log(res4.test("+"));
量词符
量词符用来设定某个模式出现的次数
量词 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或跟多次 |
? | 重复零次或一次 |
{n} | 重复 n 次 |
{n,} | 重复 n 次或更多次 |
{n,m} | 重复 n 到 m 次 |
代码示例:
var res5 = /^[abcA-z0-9_-]{6,16}$/;
console.log(res5.test("name-andy"));
console.log(res5.test("andy_red"));
console.log(res5.test("andyjFGHXH5678z"));
console.log(res5.test("andy!"));
表单验证案例:
//表单验证案例
var reg = /^[a-zA-Z0-9_-]{6,16}$/;
var text = document.querySelector("input");
var font = document.querySelector("span");
text.addEventListener("blur", function () {
if (reg.test(this.value)) {
font.innerHTML = "输入的格式正确!";
font.className = "right";
} else if (this.value == "") {
font.innerHTML = "请输入内容哦!";
font.className = "blue";
} else {
font.innerHTML = "输入的格式错误!请重新输入!";
font.className = "erro";
}
});
括号总结
- 大括号 量词符 里面表示重复次数
- 中括号字符集合。匹配方括号中的任意字符(多选一)
- 小括号表示优先级
预定义类
预定义类 | 说明 |
---|---|
\d | 匹配 0-9 任意数字,相当于[0-9] |
\D | 匹配 0-9 以外的字符,相当于[^0-9] |
\w | 匹配任意的字母,数字和下划线,相当于[A-Za-z0-9] |
\W | 除所有字母、数字和下划线以外的字符,相当于[^a-za-z0-9] |
\s | 匹配空格(包括换行符、制表符、空格等),相当于[\t\r\n\v\f] |
\S | 匹配非空格的字符,相当于[^\t\r\n\v\f] |
表单验证案例分析
- 手机号码:/^1[3|4|5|7|8]\d{9}$/
- QQ:[1-9][0-9]{4,}(腾讯 QQ 号从 10000 开始) 3.昵称中文:^[\u4e00-\u9fa5]{2,8}$
正则表达式中的替换
replace()方法可以实现替换字符操作,用来替换的参数可以是一个字符串或是一个正则表达式。
string.replace(reg/substr/replace)
- 第一个参数:被替换的字符串或者正则表达式
- 第二个参数:替换为的字符串
- 返回值是一个替换完毕的新字符串
正则表达式参数
/表达式/[switch]
switch(也称为修饰符)按照什么样的模式来匹配有三种值:
- g:全局匹配
- i:忽略大小
- gi:全局匹配+忽略大小写
案例:
var text = document.querySelector("textarea");
var btn = document.querySelector("button");
var div = document.querySelector("div");
btn.addEventListener("click", function () {
div.innerHTML = text.value.replace(/激情|傻子/g, "**");
});