6.同步异步、正则表达式

news2024/7/2 3:37:36

JS执行机制

js的特点:单线程,同一时间只能做一件事
可以通过多核CPU解决这个问题,允许js脚本创建多个线程,于是js出现了同步和异步

同步

程序执行的时候按照顺序依次执行

异步

程序执行的时候,会跳过某个步骤继续向下执行
事件都属于异步
延时函数、间歇函数

事件循环

描述了计算机在执行js的时候一种状态

代码执行时,将同步代码交给执行栈,将异步代码交给队列
先执行执行栈里的同步代码,执行完同步栈里的代码,在去执行队列里的异步代码
同步代码和异步代码执行完之后计算机不会停下来,会再去执行栈里找代码
这中循环过程就叫事件循环

数组方法

数组值拼接

        let ary = ['张三', '李四', 'laoduan']
        // 数组值拼接
        // 语法:数组名.join('符号')

        // 要求:
        // 将数组中的名子输出并以=连接:张三=李四=laoduan
        // 返回值返回一个拼接的字符串
        console.log(ary.join('='))

在这里插入图片描述

映射数组

        //映射数组(照镜子)
        let ary2 = [100, 200, 3000, 400]
        // 要求:将数组中的每一个值都在原数组的基础上涨200
        // 语法:数组名.map(function(item,index){})
        // 特点:可以遍历数组,设置返回值返回的结果是一个新数组
        let res = ary2.map(function (item, index) {
            return item + 200;
        })
        console.log(res)

在这里插入图片描述

正则表达式

a)正则表达式在程序中就是一种规则
b)正则表达式就是一种符号语言:理解每一个符号表达的含义即可

正则表达式应用场景
a)表单验证(用户注册,用户登录)
b)网页敏感词替换(大傻逼---》小可爱,,牛B---->牛波一)

定义正则

  //  正则表达式的使用
        // 步骤:
        // a)定义正则(规则)  语法:let 正则变量=/要求/
        // 注意:定义正则的时候,//不能加引号
        // 演示:
        let reg = /abc/;
        // 使用正则验证内容
        // 正则变量.test('要被验证的内容')
        // 正则变量.exec('要被验证的内容')
        // 代码演示
        let str = 'abc'
        console.log(reg.test(str))  //true表示符合这种规则
        console.log(reg.exec(str))  //如果返回的结果是一个数组表示符合这种规则
        console.log(reg.test(123))  //false表示不符合
        console.log(reg.exec(123))  //null表示不符合

在这里插入图片描述

正则语法解释

        // 正则表达式的验证
        // 只要内容中包含连续的abc就符合规则
        let reg = /abc/;
        console.log(reg.test('abc'))
        console.log(reg.test('abc123'))
        console.log(reg.test('sdasdabc123s'))

在这里插入图片描述

元字符

在正则表达式中具有特殊含义的符号

分类
边界符: ^ 和 $
  // 用法:let 正则变量=/^规则内容$/;
        // 注意:边界符在正则中可以使用一个也可以使用两个,两个都可以同时使用
        // ^符号:表示开始
        // 代码演示:
        let ref = /a/
        let str = 'abc'
        console.log(ref.test(str))
        let ref2 = /^a/
        let str2 = 'babc'
        console.log(ref2.test(str2)) //要求str必须以a开始

        // $符号:表示结束
        let ref3 = /a$/
        let str3 = 'abca'
        console.log(ref3.test(str3))
        let ref4 = /abc$/
        let str4 = 'abcaabc'
        console.log(ref4.test(str4))
        //  ^和$同时使用
        let ref5 = /^a$/   //如果同时使用表示精确匹配,ref5表示当前智能有一个字母a
        let str5 = 'abc'
        console.log(ref5.test(str5))

在这里插入图片描述

量词符
// 量词符
//  +  :表示出现的次数一次或更多次(最少一次)
//  ? :出现的次数0次或者1次(最多一次)
//  * :出现的次数为零次或更多次
//  {n}:表示出现的次数正好等于n次
//  {n,} :表示出现的次数大于等于n次
//  {n,m} :表示出现的次数大于等于n次且小于等于m次
// 备注 n和m表示两个数字

    <script>
        // 量词符
        //  +
        let reg = /^a+$/
        let str = 'aa'
        console.log(reg.test(str))
        //  ?
        let reg2 = /^a?$/
        let str2 = ''
        console.log('--------------------')
        console.log(reg2.test(str))
        console.log(reg2.test(str2))
        //  *
        //  {n}
        let reg3 = /^a{3}$/
        let str3 = 'aaa'
        console.log('--------------------')
        console.log(reg3.test(str))
        console.log(reg3.test(str3))
        let reg4 = /^ab{3}$/
        console.log(reg4.test('ababab'))
        console.log(reg4.test('abbb'))
        //  {n,}
        let reg5 = /^a{3,}$/
        let str5 = 'aaabb'
        let str7 = 'aaaa'
        console.log('--------------------')

        console.log(reg5.test(str5))
        console.log(reg5.test(str7))
        //  {n,m}
        // 备注 n和m表示两个数字

        let reg6 = /^a{3,5}$/
        let str6 = 'aaabaab'
        let str8 = 'aaaaa'

        console.log('--------------------')
        console.log(reg6.test(str6))
        console.log(reg6.test(str8))
    </script>

在这里插入图片描述

字符类

    <script>
        //    字符类
        // a) []:内容中只要包含其中一个值即可
        // b)[值-值]表示的含义:内容中要包含从某值1到值2的内容
        // c) [^值]表示的含义:对集合内的内容取反
        // d)  . :匹配除换行符之外的任何单个字符  /./ ,在字符串中,如果表示换行通过换行符实现, \r\n
        let reg = /[ab]/ //没写精确匹配
        let str = 'asdsb'
        console.log('----------------')
        console.log(reg.test(str))

        let reg2 = /[a-e]/ //表示的含义:内容中要包含从某a-e的内容
        let str2 = 'adb'
        let str3 = 'adbt'
        console.log('----------------')
        console.log(reg2.test(str2))
        console.log(reg2.test(str3))

        let reg4 = /[^ab]/
        let str4 = '123'
        console.log('----------------')
        console.log(reg4.test(str4))
        console.log(reg4.test('ab'))
    </script>

在这里插入图片描述

预定义类(属于字符类)
预定义类:就是字符类[ ]另一种简写形式
a)   \d:用来匹配0-9之间的任意一个数字[0123456789] [0-9] \d 
b)  \D:(不能有数字)
c)   \w:用来匹配任意的数字,字母,下划线  [ 0-9a-zA-Z_]
d)  \W:跟\w取反
e)   \s:用来匹配空格,换行,制表符符号(\t相当于用户按下了一次tab键)
f    \S:跟\s取反
修饰符
i:忽略大小写
g:表示全局匹配

    // i表示忽略大小写
    let reg = /a/
    let str = 'A' 
    console.log(reg.test(str))  //false
    let reg2 = /a/i; 
    console.log(reg2.test(str))  //true


    // g表示全局匹配
    let reg3 = /t/
    let str3 = 'sdasdsatdttt'
    let reg4 = /t/g
    let str4 = 'sdasdsatdttt'
    // 匹配第一个t
    console.log(reg3.exec(str3))
    console.log(reg3.exec(str3))
    console.log(reg3.exec(str3))
    console.log('---------------------------')
    //匹配全部的t
    console.log(reg4.exec(str4))
    console.log(reg4.exec(str4))
    console.log(reg4.exec(str4))

在这里插入图片描述

字符串替换
语法:字符串.replace(正则,‘替换后的内容’)
    <script>
        let str = 'a123sas23a'
        // 要求:将字符串中所有的a替换为A
        console.log(str.replace(/a/g, 'A'))
    </script>

在这里插入图片描述

敏感词替换

将用户输入的内容替换
定义一个规则将那些内容替换掉
let reg = /激情|呵呵/g 替换激情或呵呵 |表示或的意思

 <textarea name="" id="" cols="30" rows="10"></textarea>
    <input type="button" value="按钮">
    <br>
    <strong style="color: red;">展示内容</strong><span></span>
    <script>
        let reg = /激情/g
        let btn = document.querySelector('input')
        let txt = document.querySelector('textarea')
        let span = document.querySelector('span')
        btn.addEventListener('click', function () {
            let content = txt.value.replace(reg, '**')
            span.innerHTML = content

        })


    </script>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1512973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

装饰者模式-C#实现

可以使用装饰者模式来动态地给一个对象添加额外的职责。 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任&#xff0c;装饰者模式相比生成子类可以更灵活地增加功能。 在装饰者模式中各个角色有&#xff1a; 抽象构件&#xff08;Phone&#xff09;角色&#…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十三)-DL-AoD定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

STM32点亮LED灯与蜂鸣器发声

STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平&#xff0c;用以驱动Led蜂鸣器等外设&#xff0c;以及模拟通信协议输出时序等。 输入模式时可以读取端口的高低电平或电压&#xff0c;用于读取按键输入&#xff0c;外接模块电平信号输入&#xff0c;ADC电压采集灯 GP…

EM算法详解

EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐…

3D产品配置器帮助您更快进入市场的 5 种方式

如果您的电子商务商店可以从产品配置器的使用中受益&#xff08;而且大多数都可以&#xff09;&#xff0c;您还应该知道&#xff0c;此功能还可以帮助您的公司采用更具创新性的产品开发姿态。 更简单地说&#xff1a;它可以帮助您更快地构建更好的产品。 继续阅读以了解3D 产…

FPGA Vivado环境下实现D触发器

题目要求&#xff1a;使用Verilog HDL语言设计一个D触发器。请提交程序源代码和Word格式的作业文档&#xff0c;作业文档中应给出程序源代码及RTL分析原理图。 D触发器的工作原理&#xff1a; 初始状态下&#xff0c;触发器处于复位状态&#xff0c;输出为复位信号的稳定状态…

springboot266基于Web的农产品直卖平台的设计与实现

农产品直卖平台的设计与实现 摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#x…

2024 前端javaScript+ES6

JavaScript 基础 1、基本数据类型&#xff1a; 1.1 基本数据类型&#xff1a; Number&#xff08;数值&#xff09;&#xff1a;表示数字&#xff0c;包括整数和浮点数。例如&#xff1a;5、3.14。 String&#xff08;字符串&#xff09;&#xff1a;表示文本数据&#xff…

Docker容器化技术(互联机制实现便捷互访)

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系&#xff0c;接收容器可以通过容器名快速访问到源容器&#xff0c;而不用指定具体的IP地址。 1.自定义容器命名 连接系统依据容器的名称来执行。因此&#xff0c;首先需要自定义一…

【数据挖掘】实验2:R入门2

实验2&#xff1a;R入门2 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握R数据类型。 2&#xff1a;熟悉和掌握R语言的数据读写。 二&#xff1a;实验内容 1&#xff1a;R数据类型 【基本赋值】 Eg.1代码&#xff1a; x <- 8 x Eg.2代码&#xff1a; a city …

谷歌破解 OpenAI 模型关键信息;微软更改默认浏览器,不再主推 Edge 丨 RTE 开发者日报 Vol.163

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

fate隐私求交案例

intersect组件是解决纵向联邦学习中的隐私求交问题 fate隐私求交的方式有三种&#xff1a;raw,rsa,dh。raw方式不安全&#xff0c;rsa和dh方式是安全的&#xff0c;dh是基于对称加密的安全交集 rsa是基于RSA(非对称加密)的安全交集&#xff0c;&#xff0c;dh方法也用于安全的…

Uni-app跟学笔记(一):新建项目、运行、tabbar、全局配置

文章目录 1&#xff09;新建项目2&#xff09;项目运行3&#xff09;项目结构4&#xff09;开发规范5&#xff09;globalStyle全局外观配置6&#xff09;pages页面配置7&#xff09;tabbar8&#xff09;Condition 本博客为 uni-app 此门课的跟学笔记&#xff0c;目的是便于个人…

如何在安卓端的SAP里配置打印机

1、转到 SPAD 事务&#xff08;“假脱机管理”屏幕&#xff09;。单击“设备/服务器”选项卡&#xff0c;输入输出设备的名称&#xff0c;然后点击显示按钮。 2、如果打印机已配置&#xff0c;它将显示设备属性、输出设备属性和纸盒信息的所有详细信息。如果输入新的打印机名称…

基于ssm的志愿者招募系统的设计与实现(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

Java学习笔记------常用API(二)

Object 无有参构造 public Object() 空参构造 成员方法&#xff1a; public String toString() 返回对象的字符串表示 public boolean equals(object obj) 比较两个对象是否相等 Object默认用号比较地址值&#xff0c;需要重写才能比较属性值 protected O…

基于java+springboot+vue实现的自习室管理和预约系统(文末源码+Lw)23-177

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装自习室管理和预约系统软件来发挥其高效地信息处理的作用&a…

vue脚手架创建项目失败,报错淘宝镜像地址证书过期问题解决

场景&#xff1a; 使用vue-cli脚手架创建vue新项目时&#xff0c;控制台报错&#xff0c;创建失败 控制台报错&#xff1a;ERROR Failed to get response from https://registry.npm.taobao.org/binary-mirror-config 尝试过的方式&#xff1a; 清除npm缓存或删除npm-cache文…

YashanDB亮相2024年中国石油石化信息通信技术交流大会

3月6日-8日&#xff0c;2024年中国石油石化信息通信技术交流大会在成都举办。YashanDB携智慧油气化数据管理解决方案亮相本次展会&#xff0c;展示最新的研发成果和场景应用。 当前&#xff0c;石油石化行业数字化转型不断深化&#xff0c;随之而来的是海量数据的计算与交互&a…

代码随想录算法训练营第day41|背包理论基础、416. 分割等和子集

目录 a.背包理论基础——01背包 1.二维数组的01背包表示 2.一维滚动数组表示 b. 416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; a.背包理论基础——01背包 背包问题分类&#xff1a; 对于面试的话&#xff0c;其实掌握01背包&#xff0c;和完全背包&#xff…