JS高级(四):正则表达式、常见的特殊字符、案例、预定义类、正则替换

news2025/8/12 7:42:41

JavaScript高级(四)

  • 一、正则表达式
    • 1.它有什么作用?
    • 2.创建正则表达式
      • (1)利用RegExp对象来创建
      • (2)利用字面量创建
    • 3.测试正则表达式
  • 二、特殊字符
    • 1.^和$匹配开头和结尾
    • 2.[ ]字符类
    • 3.量词符
  • 三、用户名表单验证
  • 四、括号总结
  • 五、预定义类
  • 六、正则替换

一、正则表达式

1.它有什么作用?

1、匹配字符,如昵称只可以输入中文
2、替换字符,如过滤敏感词
3、提取字符,如搜索时输入“手机”会出现“手机壳”,“手机充电器”等

实际开发中,一般都是直接复制已经写好的正则表达式,因为不太好写

2.创建正则表达式

正则表达式创建时不要加引号,不管是数字型还是字符串型

(1)利用RegExp对象来创建

let regexp = new RegExp(/123/);
console.log(regexp);
console.log('/123/');

在这里插入图片描述

(2)利用字面量创建

let regexp = /123/;
console.log(regexp );

3.测试正则表达式

使用test()方法来测试字符串是否符合正则表达式

var regexp = /123/;  //是否包含123
console.log(regexp.test(123)); //true
console.log(regexp.test('123'));  //true
console.log(regexp.test(1234567));  //true
console.log(regexp.test(12));  //false
console.log(regexp.test('abc'));  //false

二、特殊字符

可以参考:MDN正则表达式

^以。。。开头
$以。。。结尾
$以。。。结尾

1.^和$匹配开头和结尾

普通情况:/abc/,只要包含abc返回的都是true

var reg = /abc/;  //只要包含abc返回的都是true
console.log(reg.test('abc')); //true
console.log(reg.test('abcd'));//true
console.log(reg.test('aabcd'));//true

/^abc/必须以abc开头才为true:

var reg = /^abc/;  //必须以abc开头才为true
console.log(reg.test('abc')); //true
console.log(reg.test('abcd')); //true
console.log(reg.test('aabcd')); //false

/^abc$/精确匹配,必须是abc这三个字符才为true

var reg = /^abc$/;  //精确匹配,必须是abc才为true
console.log(reg.test('abc')); //true
console.log(reg.test('abcd')); //false
console.log(reg.test('aabcd')); //false
console.log(reg.test('abcabc')); //false

2.[ ]字符类

[ ]表示有一系列字符可供选择,只要匹配其中一个就可以
/[abc]/,只要包含abc其中一个字符,就true

var reg = /[abc]/; //只要包含abc其中一个字符,就true
console.log(reg.test('andy'));//true
console.log(reg.test('baby'));//true
console.log(reg.test('color'));//true
console.log(reg.test('dj'));//false

/^[abc]$/精确匹配,必须是a或者b或者c其中一个才为true

var reg = /^[abc]$/; //精确匹配,必须是a或者b或者c其中一个才为true
console.log(reg.test('aa')); //false
console.log(reg.test('a')); //true
console.log(reg.test('b')); //true
console.log(reg.test('c')); //true
console.log(reg.test('abc')); //false

/^[a-z]$/精确匹配,必须是26个英文字母其中一个才为true,-可以作为范围限定

var reg = /^[a-z]$/; //精确匹配,必须26个英文字母其中一个才为true
console.log(reg.test('ss')); //false
console.log(reg.test('a')); //true
console.log(reg.test('f')); //true
console.log(reg.test('aafasd')); //false
console.log(reg.test('A')); //false
console.log(reg.test('1')); //false

/^[a-zA-Z0-9_-]$/精确匹配,大小写字母,0-9数字,还有后面的字符,只要是其中一个就为true,其中一个噢

var reg = /^[a-zA-Z0-9_-]$/; 
//精确匹配,大小写字母,0-9数字,还有后面的字符,只要是其中一个就为true
console.log(reg.test(7)); //true
console.log(reg.test('F')); //true
console.log(reg.test('t')); //true
console.log(reg.test('-')); //true
console.log(reg.test('34234')); //false
console.log(reg.test('@')); //false

/^[^a-zA-Z0-9_-]$/如果[]里面的内容前面加了^,那么意思是取反,精确匹配,除了大小写字母,0-9数字,还有后面的字符,其他的其中一个就为true,

var reg = /^[^a-zA-Z0-9_-]$/;
 //如果[]里面的内容前面加了`^`,那么意思是取反
 //精确匹配,除了大小写字母,0-9数字,还有后面的字符,其他的其中一个就为true,
 console.log(reg.test(7)); //false
 console.log(reg.test('F')); //false
 console.log(reg.test('t')); //false
 console.log(reg.test('-')); //false
 console.log(reg.test('34234')); //这个依然是false,因为不是其中一个
 console.log(reg.test('@')); //true

3.量词符

设定某个模式出现的次数

/^a*$/出现>=0个a为true
/^a+$/出现>=1个a为true
/^a?$/出现0或1个a为true

var reg = /^a*$/;  //出现>=0个a为true
console.log(reg.test('')); //true
console.log(reg.test('a')); //true
console.log(reg.test('aaaa')); //true

var reg = /^a+$/;  //出现>=1个a为true
console.log(reg.test('')); //false
console.log(reg.test('a')); //true
console.log(reg.test('aaaa')); //true

var reg = /^a?$/;  //出现1或0个a为true
console.log(reg.test('')); //true
console.log(reg.test('a')); //true
console.log(reg.test('aaaa')); //false

/^a{3}$/出现3个a为true
/^a{3,}$/出现>=3个a为true
/^a{3,6}$/出现3~6个a为true
中间不要有空格

var reg = /^a{3}$/;  //出现3个a为true
console.log(reg.test('')); //false
console.log(reg.test('a')); //false
console.log(reg.test('aaaa')); //false
console.log(reg.test('aaa')); //true

var reg = /^a{3,}$/;  //出现>=3个a为true
console.log(reg.test('')); //false
console.log(reg.test('a')); //false
console.log(reg.test('aaaa')); //true
console.log(reg.test('aaa')); //true

var reg = /^a{3,6}$/;  //出现3~6个a为true
console.log(reg.test('')); //false
console.log(reg.test('a')); //false
console.log(reg.test('aaaa')); //true
console.log(reg.test('aaa')); //true
console.log(reg.test('aaaaaaaaaa')); //false

设定某个模式出现的次数
/^[a-zA-Z0-9_-]{6,16}$/,在这些东西里面,出现其中的6~16个为true

var reg = /^[a-zA-Z0-9_-]{6,16}$/;
//在这些东西里面,出现其中的6~16个为true
console.log(reg.test('zzy_008'));//true
console.log(reg.test('zzy-007'));//true
console.log(reg.test('zzy!007'));//false

三、用户名表单验证

这个比较简单,就不解释了

<input type="text"> <span>请输入用户名</span>
<script>
    let input = document.querySelector('input');
    let span = document.querySelector('span');
    let reg = /^[a-zA-Z0-9_-]{6,16}$/;
    
    input.onblur = function() {
        let result = reg.test(input.value);
        if(result) {
            span.className = 'right';
            span.innerHTML = '用户名格式正确!'
        }else {
            span.className = 'wrong';
            span.innerHTML = '用户名格式错误!'
        }
    }
</script>

四、括号总结

中括号:字符集合,匹配方括号中的任意字符

var reg = /^[a-zA-Z0-9_-]$/;

大括号:量词符,里面表示重复的次数或范围

var reg = /^abc{3}$/;  只有abccc返回true
var reg = /^[a-zA-Z0-9_-]{3,7}$/;

小括号:表示优先级

var reg = /^(abc){3}$/;  只有abcabcabc返回true

在线测试工具:https://c.runoob.com/front-end/854/

五、预定义类

预定义类就是某些常见模式的语法糖罢了
在这里插入图片描述
案例:座机号码验证:010-12345678或0530-1234567
正则中的或用 | 来表示,不能有空格。
^$时,[0-9]是多选一,长度为3,没有^$就是只要是数字就行,就没有长度限制了

//座机号码验证:010-12345678或0530-1234567
//正则中的或用 | 来表示,不能有空格
let reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/;
//let reg = /^[0-9]{3}-[0-9]{8}|[0-9]{4}-[0-9]{7}$/;
console.log(reg.test('010-123456')); //false
console.log(reg.test('0230-12345678')); //false
console.log(reg.test('0510-1234567')); //true

六、正则替换

replace()可以实现字符串替换操作,替换的参数可以是字符串或正则表达式。
但是它只能替换字符串中的第一个,如果后面再出现这个字符,不会再被替换

字符串
let str = 'zzy和dj和dj';
let newStr = str.replace('dj', 'beat');
console.log(newStr); //zzy和beat和dj

替换正则表达式:

正则表达式参数可以加修饰符:/表达式/g
g(global):全局匹配
i(ignore):忽略大小写
gi:全局匹配+忽略大小写

<textarea id="msg"></textarea><button>提交</button>
<div></div>
<script>
    let msg = document.querySelector('#msg');
    let btn = document.querySelector('button');
    let div = document.querySelector('div');
    btn.onclick = function () {
        //正则表达式参数可以加修饰符
        // g:全局匹配,i:忽略大小写,gi:全局匹配+忽略大小写
        div.innerHTML = msg.value.replace(/我靠|我去/gi, '我*');
    }
</script>

js高级到这里就结束了,学习前端半年了,感谢pink老师,不过老师的课可能讲的还是浅了些,后面我会再去搜寻更好的课程,慢慢往里面补充,加油!!

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

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

相关文章

有线热电偶温度验证系统

在本文中&#xff0c;我们将介绍使用有线热电偶温度验证系统的一些优势&#xff0c;并将虹科Ellab的E-Val™ Pro与市场上可用的传统有线系统&#xff08;验证仪&#xff09;进行比较分析。 虹科E-Val Pro是一个高度直观的基于电缆的系统。设计用于各种应用&#xff0c;如冻干、…

数字化时代,企业为什么需要商业智能BI?

数字化时代的到来&#xff0c;数据资产已经成为第五大生产要素&#xff0c;数据是企业生产、经营和决策的重要因素。为提升企业经营状况的感知能力&#xff0c;数据分析应运而生&#xff0c;数据获取的及时性、准确性也需要更加系统些&#xff0c;此时&#xff0c;成熟的商业智…

EasyExcel代码层面设置写出的Excel样式、以及拦截器策略的使用、自动列宽设置、EasyExcel默认设置详解

一、概述 虽然EasyExcel已经提供了一系列注解方式去设置样式。 但是如果没有实体类&#xff0c;或者想要更精确的去设置导出文件的Excel样式的时候就需要在代码层面去控制样式了。 二、使用已有拦截器自定义样式 主要步骤&#xff1a; 创建Excel对应的实体对象创建一个sty…

注意 ! !|95% 的应用程序中发现错误配置和漏洞

业内权威机构 Synopsys 最近发布了一项研究报告&#xff0c;结果表明在进行4300次测试后&#xff0c;发现95%的应用程序中都至少都有一个影响安全的漏洞或配置错误&#xff0c;其中高危漏洞占20%&#xff0c;严重漏洞则占4.5%。在此次研究中&#xff0c;82% 的测试目标是 Web 应…

调用链路上千条,如何观测 Nacos 的运行状态

作者&#xff1a;涌月 背景 随着近年来微服务体系发展&#xff0c;微服务上下游链路的越来越复杂&#xff0c;在阿里云的线上实践场景中&#xff0c;我们发现使用微服务架构的公司的业务动辄会出现上千条调用链路&#xff0c;排查问题代价巨大。 在这种背景下&#xff0c;阿…

灰鸽子木马特征值免杀

文章目录木马特征值免杀一. 木马特征值免杀0x01. 灰鸽子配置生成木马0x02. 使用MyCCL复合特征码定位器反复缩小目标进行定位0x03. 直到定位到很小的区间0x04. 用工具将文件偏移地址0009B9C3转换成内存地址0049C5C30x05. 使用OD跳转特征值语句的执行顺序以实现免杀0x06. 将修改后…

【深入浅出Spring6】第五期——循环依赖和反射机制

一、Bean的循环依赖问题 什么是循环依赖&#xff1f; 类似于A依赖B&#xff0c;B又依赖A&#xff0c;这样就构成了依赖闭环 需求&#xff1a;我们创建两个类&#xff0c;彼此内置对方为私有属性&#xff0c;我们查看是否可以正常输出 $ singleton setter产生的循环依赖 编写我…

(八)Bean的生命周期

文章目录环境什么是Bean的生命周期为什么要知道Bean的生命周期Bean生命周期之5步Bean生命周期之7步Bean生命周期之10步三个点位详解&#xff1a;点位1点位2点位3演示程序Bean的作用域不同&#xff0c;管理方式不同自己new的对象如何让Spring管理上一篇&#xff1a;&#xff08;…

UE4 回合游戏项目 20- 添加人物被攻击的动画

在上一节&#xff08;UE4 回合游戏项目 19- 添加血量UI&#xff09;基础上继续添加人物被攻击时播放被攻击动画的功能。 效果&#xff1a;&#xff08;当玩家被攻击时&#xff0c;播放相应的受到伤害的动画&#xff09; 步骤&#xff1a; 1.打开“1lantu”&#xff0c;在事件图…

艾美捷试剂级SM-102解决方案

LNP是一种多组分系统&#xff0c;通常由可电离脂质或阳离子类脂质化合物、辅助脂质、胆固醇、保护剂聚乙二醇-脂质共轭物组成。 脂质纳米颗粒&#xff08;LNP&#xff09;是mRNA药物常用的载体。目前&#xff0c;BioNTech/辉瑞和 Moderna的mRNA疫苗都采用LNP作为运输载体&#…

SpringMVC ---- RESTful

SpringMVC ---- RESTful1. RESTful简介a>资源b>资源c>资源2. RESTful的实现3. HiddenHttpMethodFilter1. RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表示层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c;即&…

ECM:敏感文档控制的秘密武器

ECM&#xff1a;敏感文档控制的秘密武器 您的企业每天都会创建和处理数百个文档。这些文件详细说明了企业流程、产品规格&#xff0c;并为其他员工和客户提供指导。 每天都有大量文档流入和流出您的组织&#xff0c;有一件事始终保持不变&#xff1a;那就是组织内部和外部的…

Docker零基础快速入门(通俗易懂)

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 Docker一、安装Docker二、配置镜像加速器三、Docker服务命令四、Docker镜像命令五、Docker容器命令六、Docker容器数据卷七、Docker部署应用…

view的context一定是Activity吗

最近在使用glide加载图片的时候出现“Caused by: java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity”&#xff0c;但明明在使用glide之前已经进行了Activity是否destroy的判断&#xff0c;为什么还会发生这个crash呢&#xff1f;注意到A…

【快速上手系列】使用idea调百度AI接口实现内容审核(鉴黄)功能

【快速上手系列】使用idea调百度AI接口实现内容审核&#xff08;鉴黄&#xff09;功能 一、文本审核 步骤 1、百度AI开放平台 登录后点击控制台 点击应用列表——点击创建应用 填写一下信息然后创建 也可以配置审核策略 策略配置页面 然后回到概览——领取免费资源&#xf…

threeJS嵌入可交互的普通页面

效果图:1.这是我将一个地图当作地面&#xff0c;外面再包一个天空盒就更好看了 2.上面的例子可能不够直观&#xff0c;下面这个例子是嵌入的bilibili官网&#xff0c;嵌入的网页内容可以正常交互 关键 关键是用到了CSS3DRenderer渲染器。CSS3DRenderer仅仅关注普通的DOM元素&a…

【计算机网络】无线局域网详解

文章目录无线局域网IEEE802.11IEEE802.11的MAC帧头有固定基础设施的无线局域网无固定基础设施无线局域网的自组织网络VLAN传统局域网的局限VLAN虚拟局域网基本概念virtual local area networkVLAN 实现&#x1f343;博主昵称&#xff1a;一拳必胜客 &#x1f338;博主寄语&…

数据增强方法汇总

数据增强1.有监督数据增强1.1 单样本数据增强augly安装augly使用方法1.2 多样本数据增强1.2.1 SMOTEpython实现1.2.2 SamplePairingpython实现1.2.3 mixuppython实现2.无监督数据增强2.1 GAN2.2 Diffunsion2.3 Autoaugmentation1.有监督数据增强 1.1 单样本数据增强 augly安装…

MongoDB(4.0.9)数据从win迁移到linux

服务器从win迁移导了linux上了&#xff0c;对应的md里面的数据也需要做全量迁移&#xff0c;在网上找了一大堆方案&#xff0c;不是缺胳膊就是少腿&#xff0c;没有一个是完整的&#xff0c;最终加以分析和整理&#xff0c;得出这套方案&#xff0c;希望对你有用 第一步&#…

Java集合框架【二容器(Collection)[Vector容器类]】

文章目录三 Vector容器类3.5 Vector容器类3.5.1 Vector的使用3.5.2 Stack容器3.5.3.1 Stack容器介绍3.5.3.2 操作栈方法Stack的使用案例三 Vector容器类 3.5 Vector容器类 Vector底层是用数组实现的&#xff0c;相关的方法都加了同步检查&#xff0c;因此“线程安全&#xff…