加载中...
正则表达式
发表于:2021-07-11 | 分类: 前端 js 笔记
字数统计: 1.5k | 阅读时长: 6分钟 | 阅读量:

正则表达式


什么是正则表达式

正则表达式是用于匹配字符串中字符组合模式。在javascript中,正则表达式也是对象。

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,例如表单验证:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的一些敏感词(替换),或字符串中获取我们想要的特定部分(提取)等。

正则表达式的特点

  1. 灵活性,逻辑性和功能性非常的强。
  2. 可以迅速地用简单的方式达到字符串的复杂控制。
  3. 对于刚接触的人来说比较晦涩难懂。比如:^\w+([-+.]\w+)@\w+([-.]\w+)$。
  4. 实际开发,一般都是复制写好的正则表达式,但是要求会使用正则表达式并且根据实际情况修改正则表达式.比如用户名:/^[a-z0-9_-]{3,16}$/。

创建正则表达式

在 javascript 中,可以通过两种方式创建一个正则表达式。

  1. 通过调用 RegExp 对象的构造函数创建。

    var 变量名 = new RegExp(/表达式/);
  2. 通过字面量创建

    var 变量名 = /表达式/;

测试正则表达式 test 方法

  • test()正则对象方法,用于检测字符串是否符合规则,该对象会返回 true 或 false,其参数是测试字符串。

    regexobj.test(str)

  1. regexobj 是写的正则表达式
  2. str 我们要测试的文本
  3. 就是检测 str 文本是否符合我们写的正则表达式规范。

正则表达式中的特殊字符

正则表达式的组成

一个正则表达式可以由简单的字符构成,比如/abc/,也可以是简单和特殊字符的组合,比如/ab*c/。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如、$、+等。

边界符

  1. ^:表示匹配首行的文本(以谁开始)
  2. $:表示匹配行尾的文本(以谁结束)

代码示例:

//边界符
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"));
  1. 字符组合
    /^[a-zA-Z0-9_-]$/
  2. [^]方括号内部 取反符^
    /^[^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";
  }
});

括号总结

  1. 大括号 量词符 里面表示重复次数
  2. 中括号字符集合。匹配方括号中的任意字符(多选一)
  3. 小括号表示优先级

预定义类

预定义类 说明
\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. 手机号码:/^1[3|4|5|7|8]\d{9}$/
  2. QQ:[1-9][0-9]{4,}(腾讯 QQ 号从 10000 开始) 3.昵称中文:^[\u4e00-\u9fa5]{2,8}$

正则表达式中的替换

replace()方法可以实现替换字符操作,用来替换的参数可以是一个字符串或是一个正则表达式。

string.replace(reg/substr/replace)

  1. 第一个参数:被替换的字符串或者正则表达式
  2. 第二个参数:替换为的字符串
  3. 返回值是一个替换完毕的新字符串

正则表达式参数

/表达式/[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, "**");
});
上一篇:
ES6
下一篇:
函数
本文目录
本文目录