ES6 —— 正则表达式

简介: ES6 —— 正则表达式

一、正则表达式概述

什么是正则表达式:用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。

正则表达式通常用来检索、替换那些符合某个模式(规则)的文本。例如验证表单(匹配)、过滤页面中的一些敏感词(替换)、从字符串中获取我们想要的特定部分(提取)。

二、正则表达式的特点

  1. 灵活性、逻辑性和功能性非常的强。
  2. 可以迅速地用极简单的方式达到字符串的复杂控制。

邮箱:

用户名

a1e181e5820d44069033484c3352a4e9.png

三、正则表达式的使用

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

  1. 通过调用 RegExp 对象的构造函数创建。
  let regexp = new RegExp(/表达式/)
  console.log(regexp) // /123/

1bd8ba0114eb41dbbe40d92d991c059f.png

  1. 利用字面量创建正则表达式
  let regexp = /123/
    console.log(regexp)

9d22b632bf6c43cb8f60b6b61aacb60b.png

四、测试正则表达式

  1. test(): 正则对象方法,用于检测字符串是否符合该规则,该对象会返回 true 或 false,其参数是测试字符串。
  let reg = /123/ 
    console.log(reg.test(123)) //true
    console.log(reg.test('xbc')) //false

五、正则表达式中的边界符

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

边界符:正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。

bc8409dc167840818931e54cdd2cc87c.png

  //只要包含 abc 就可以
  let reg = /abc/
    console.log(reg.test('abc')) //true
    console.log(reg.test('abcd')) //true
  //必须以 abc 开头
  let reg = /^abc/
    console.log(reg.test('abc')) //true
    console.log(reg.test('abcd')) //true
    console.log(reg.test('cbad')) //false
  //只能是 abc
  let reg = /^abc$/
    console.log(reg.test('abc')) //true
    console.log(reg.test('abcd')) //false

六、正则表达式字符类

  1. 字符类:[] 表示有一系列字符可供选择,只要匹配其中一个就可以了。
    //包含里面的任何一个字符都返回true
    let reg = /[abc]/
    console.log(reg.test('andy')) //true
    console.log(reg.test('baby')) //true
    console.log(reg.test('red')) //false


  //三选一: 只能是a 或者b 或者c 这三个字母才返回 true
    let reg = /^[abc]$/
    console.log(reg.test('b')) //true
    console.log(reg.test('abc')) //false
    console.log(reg.test('andy')) //false
  1. [-] 方括号内部 范围符号 -
  //26个小写英文字母任何一个都返回 true
    let reg = /^[a-z]$/
    console.log(reg.test('a')) //true
    console.log(reg.test('y')) //true
    console.log(reg.test('A')) //false
    console.log(reg.test('abc')) //false


  //26个英文字母任何一个都返回 true
    let reg = /^[a-zA-Z]$/
    console.log(reg.test('a')) //true
    console.log(reg.test('y')) //true
    console.log(reg.test('A')) //true
    console.log(reg.test('abc')) //false
  1. 如果 [] 里面有 ^ 表示取反的意思。
  //如果中括号里面有 ^ 表示取反的意思
    let reg = /^[^a-zA-Z0-9_-]$/
    console.log(reg.test('a')) //false
    console.log(reg.test('y')) //false
    console.log(reg.test('A')) //false
    console.log(reg.test('!')) //true

七、正则表达式量词符

  1. 量词符用来设定某个模式出现的次数。
  2. 88ca14e8c06249fa9f511de8b9287a4f.png
  3. *:重复零次或更多次。
  let reg = /^a*$/
    console.log(reg.test('')) //true
    console.log(reg.test('a')) //true
    console.log(reg.test('aaa')) //true
    console.log(reg.test('abc')) //false

+:重复一次或更多次。

  let reg = /^a+$/
    console.log(reg.test('')) //false
    console.log(reg.test('a')) //true
    console.log(reg.test('aaa')) //true
    console.log(reg.test('abc')) //false

?:重复零次或一次。

  let reg = /^a?$/
    console.log(reg.test('')) //true
    console.log(reg.test('a')) //true
    console.log(reg.test('aaa')) //false
    console.log(reg.test('abc')) //false

{n}:重复 n 次。

  let reg = /^a{3}$/
    console.log(reg.test('a')) //false
    console.log(reg.test('aaa')) //true
    console.log(reg.test('abc')) //false

{n,}:重复 n 次或更多次。

  let reg = /^a{3,}$/
  console.log(reg.test('a')) //false
    console.log(reg.test('aaa')) //true
    console.log(reg.test('aaaaaa')) //true
    console.log(reg.test('abc')) //false

{n,m}:重复大于等于 n 次且小于等于 m 次。

  let reg = /^a{3,5}$/
    console.log(reg.test('a')) //false
    console.log(reg.test('aaa')) //true
    console.log(reg.test('aaaaa')) //true
    console.log(reg.test('abc')) //false

量词重复出现

  //这个模式用户只能输入英文字母 数字 下划线 短横线 且 6-16 位
  let reg = /^[a-zA-Z0-9_-]{6,16}$/
  console.log(reg.test('study')) //false
    console.log(reg.test('andy-666')) //ture
    console.log(reg.test('andy!666')) //false

八、用户名验证

  1. 如果用户名输入合法,失去焦点后,提示合法,且颜色为绿色。
  2. 如果用户名输入不合法,失去焦点后,提示不合法,且颜色为红色。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        span {
            color: #aaa;
        }
        .right {
            color: green;
        }
        .wrong {
            color: red;
        }
    </style>
</head>
<body>
    <input type="text" class="uname"><span>请输入用户名</span>
    <script>
        let input = document.querySelector('input')
        let span = document.querySelector('span')
        let reg = /^[a-zA-Z0-9_-]{6,16}$/
        input.onblur = function(){
            if(reg.test(this.value)){
                span.innerHTML = '格式正确'
                span.className = 'right'
            }else{
                span.innerHTML = '格式错误'
                span.className = 'wrong'
            }
        }
    </script>
</body>
</html>

7e677ed5301f401fb12f346c0380c16b.pngde92d154abaa4933b64cd048435055af.png

九、预定义类

  1. 预定义类是某些常见模式的简写方法。
  2. e41e25b8e9b54dee97ac6cd027289c9f.png
  3. \d:匹配 0-9 之间的任一数字,相当于 [0-9]
  let reg = /^\d{1,5}$/
    console.log(reg.test(123)) //true
    console.log(reg.test('aa123')) //false

\D:匹配所有 0-9 以外的字符,相当于 [^0-9]

  let reg = /^\D{1,5}$/
    console.log(reg.test('a-!')) //true
    console.log(reg.test('777')) //false

\w:匹配任意的字符、数字和下划线,相当于 [A-Za-z0-9_]。

  let reg = /^\w{1,5}$/
    console.log(reg.test('a-!')) //false
    console.log(reg.test('Aa66_')) //true

\W:匹配除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]

  let reg = /^\W{1,5}$/
    console.log(reg.test('!')) //true
    console.log(reg.test('Aa66_')) //false

\s:匹配空格(包括换行符、制表符、空格符等),相当于 [\t\r\n\v\f] 。

  let reg = /^\s{1,5}$/
    console.log(reg.test(' ')) //true
    console.log(reg.test('hi')) //false

\S:匹配非空格(包括换行符、制表符、空格符等)字符,相当于 [^\t\r\n\v\f]。

  let reg = /^\s{1,5}$/
    console.log(reg.test(' ')) //false
    console.log(reg.test('hi')) //true

十、座机号码验证

  1. 全国座机号码两种格式:010-12345678 或者 0530-1234567
  //正则里面的或者符号 | (一个杠)
  let reg = /^\d{3}-\d{8}|^\d{4}-\d{7}$/

十一、字符串替换

  1. replace() 方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或者一个正则表达式。
  stringObject.replace(regexp/substr,replacement)
  1. 第一个参数:被替换的字符串或者正则表达式
  2. 第二个参数:替换为的字符串
  3. 返回值是一个替换完毕的新字符串
  <textarea name="" id="message"></textarea> <button>提交</button>
  let text = document.querySelector('textarea');
    let btn = document.querySelector('button');
    let div = document.querySelector('div');
    btn.onclick = function() {
        div.innerHTML = text.value.replace(/激情|gay|jiqing/g, '**');
    }

e3dfdcb33ff749b1a40f446723d74d4b.png

相关文章
|
设计模式 Java 程序员
日志框架Slf4j作用及其实现原理
日志框架Slf4j作用及其实现原理
326 0
|
人工智能 小程序 JavaScript
【Java】智慧校园家校互通小程序源码
【Java】智慧校园家校互通小程序源码
312 0
|
负载均衡 网络协议 应用服务中间件
HAProxy 与 NGINX:全面比较
【8月更文挑战第21天】
2520 0
HAProxy 与 NGINX:全面比较
|
存储 数据可视化 数据管理
Ganos三维引擎系列(三):BIM数据管理与可视化功能解析
本文介绍了阿里云多模态时空数据库Ganos三维引擎在BIM数据管理中的应用。Ganos三维引擎支持三大类存储结构:表面网格模型、体网格模型与3D实景模型,其中表面网格模型(SFMesh)用于存储带有语义的类BIM精细化三维模型,同时提供了空间索引、分析算子、导入工具、可视化支撑等功能,本文详细介绍表面网格模型应用于IFC格式的BIM数据管理与可视化等功能。
|
数据库 知识图谱
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
226 0
|
前端开发 C#
浅谈WPF之Popup弹出层
在日常开发中,当点击某控件时,经常看到一些弹出框,停靠在某些页面元素的附近,但这些又不是真正的窗口,而是页面的一部分,那这种功能是如何实现的呢?今天就以一个简单的小例子,简述如何在WPF开发中,通过Popup实现鼠标点击弹出浮动停靠窗口,仅供学习分享使用,如有不足之处,还请指正。
439 0
Bugku-社工进阶收集-MISC方向
Bugku-社工进阶收集-MISC方向
216 1
|
人工智能 运维 Cloud Native
活动回顾丨阿里云 Serverless 技术实战与创新广州站回放& PPT 下载
活动回顾丨阿里云 Serverless 技术实战与创新广州站回放& PPT 下载
|
设计模式 架构师 算法
这个时代,达不到百万以上并发量都不叫高并发!!收藏学以致用
成为一名年薪百万的顶尖架构师,实现财富自由,是大多数JAVA高级程序员的职业追求。 这不仅是技术发展的趋势,同时也是个人职业价值的体现。 但最终能否成为IT架构中的「灵魂人物」,做出亿级用户量的产品、搭建承载百万级并发的架构,还要取决于你能不能翻过并发量这道坎。
|
Java Linux 开发工具
linux 批量上传jar包到私服仓库
linux 批量上传jar包到私服仓库