千家信息网

JavaScript高级正则表达式如何理解

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关JavaScript高级正则表达式如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript高级正则表达式
千家信息网最后更新 2025年11月07日JavaScript高级正则表达式如何理解

这篇文章将为大家详细讲解有关JavaScript高级正则表达式如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

JavaScript高级正则表达式

1.正则表达式概述

1.1什么是正则表达式

正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。

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

其他语言也会使用正则表达式,本阶段我们主要是利用JavaScript 正则表达式完成表单验证。

1.2 正则表达式的特点

灵活性、逻辑性和功能性非常的强。

可以迅速地用极简单的方式达到字符串的复杂控制。

对于刚接触的人来说,比较晦涩难懂。比如:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

实际开发,一般都是直接复制写好的正则表达式. 但是要求会使用正则表达式并且根据实际情况修改正则表达式. 比如用户名: /^[a-z0-9_-]{3,16}$/

2.正则表达式在js中的使用

2.1正则表达式的创建

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

方式一:通过调用RegExp对象的构造函数创建

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

方式二:利用字面量创建 正则表达式

 var rg = /123/;
2.2测试正则表达式

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

var rg = /123/;console.log(rg.test(123));//匹配字符中是否出现123  出现结果为trueconsole.log(rg.test('abc'));//匹配字符中是否出现123 未出现结果为false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gN4RwCa1-1640762098190)(images/img4.png)]

3.正则表达式中的特殊字符

3.1正则表达式的组成

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

3.2边界符

边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)

如果 ^和 $ 在一起,表示必须是精确匹配。

var rg = /abc/; // 正则表达式里面不需要加引号 不管是数字型还是字符串型// /abc/ 只要包含有abc这个字符串返回的都是trueconsole.log(rg.test('abc'));console.log(rg.test('abcd'));console.log(rg.test('aabcd'));console.log('---------------------------');var reg = /^abc/;console.log(reg.test('abc')); // trueconsole.log(reg.test('abcd')); // trueconsole.log(reg.test('aabcd')); // falseconsole.log('---------------------------');var reg1 = /^abc$/; // 精确匹配 要求必须是 abc字符串才符合规范console.log(reg1.test('abc')); // trueconsole.log(reg1.test('abcd')); // falseconsole.log(reg1.test('aabcd')); // falseconsole.log(reg1.test('abcabc')); // false
3.3字符类

字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。

3.3.1 [] 方括号

表示有一系列字符可供选择,只要匹配其中一个就可以了

var rg = /[abc]/; // 只要包含有a 或者 包含有b 或者包含有c 都返回为trueconsole.log(rg.test('andy'));//trueconsole.log(rg.test('baby'));//trueconsole.log(rg.test('color'));//trueconsole.log(rg.test('red'));//falsevar rg1 = /^[abc]$/; // 三选一 只有是a 或者是 b  或者是c 这三个字母才返回 trueconsole.log(rg1.test('aa'));//falseconsole.log(rg1.test('a'));//trueconsole.log(rg1.test('b'));//trueconsole.log(rg1.test('c'));//trueconsole.log(rg1.test('abc'));//true----------------------------------------------------------------------------------var reg = /^[a-z]$/ //26个英文字母任何一个字母返回 true  - 表示的是a 到z 的范围  console.log(reg.test('a'));//trueconsole.log(reg.test('z'));//trueconsole.log(reg.test('A'));//false-----------------------------------------------------------------------------------//字符组合var reg1 = /^[a-zA-Z0-9]$/; // 26个英文字母(大写和小写都可以)任何一个字母返回 true  ------------------------------------------------------------------------------------//取反 方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。var reg2 = /^[^a-zA-Z0-9]$/;console.log(reg2.test('a'));//falseconsole.log(reg2.test('B'));//falseconsole.log(reg2.test(8));//falseconsole.log(reg2.test('!'));//true

3.3.2量词符

量词符用来设定某个模式出现的次数。

量词说明
*重复0次或更多次
+重复1次或更多次
?重复0次或1次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

3.3.3用户名表单验证

功能需求:

1.如果用户名输入合法, 则后面提示信息为: 用户名合法,并且颜色为绿色

2如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范, 并且颜色为红色

分析:

  • 用户名只能为英文字母,数字,下划线或者短横线组成, 并且用户名长度为6~16位.

  • 首先准备好这种正则表达式模式/$[a-zA-Z0-9-_]{6,16}^/

  • 当表单失去焦点就开始验证.

  • 如果符合正则规范, 则让后面的span标签添加 right类.

  • 如果不符合正则规范, 则让后面的span标签添加 wrong类.

 请输入用户名 

3.3.4 括号总结

1.大括号 量词符. 里面表示重复次数

2.中括号 字符集合。匹配方括号中的任意字符.

3.小括号表示优先级

3.4预定义类

预定义类指的是某些常见模式的简写方式.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cETagwqf-1640762098196)(images/img3.png)]

案例:验证座机号码

var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/;var reg = /^\d{3,4}-\d{7,8}$/;

表单验证案例

//手机号验证:/^1[3|4|5|7|8][0-9]{9}$/;//验证通过与不通过更换元素的类名与元素中的内容 if (reg.test(this.value)) {    // console.log('正确的');    this.nextElementSibling.className = 'success';    this.nextElementSibling[xss_clean] = ' 恭喜您输入正确';   } else {       // console.log('不正确');      this.nextElementSibling.className = 'error';      this.nextElementSibling[xss_clean] = '格式不正确,请从新输入 '; }
//QQ号验证: /^[1-9]\d{4,}$/; //昵称验证:/^[\u4e00-\u9fa5]{2,8}$///验证通过与不通过更换元素的类名与元素中的内容 ,将上一步的匹配代码进行封装,多次调用即可 function regexp(ele, reg) {    ele.onblur = function() {      if (reg.test(this.value)) {        // console.log('正确的');        this.nextElementSibling.className = 'success';        this.nextElementSibling[xss_clean] = ' 恭喜您输入正确';   } else {     // console.log('不正确');     this.nextElementSibling.className = 'error';     this.nextElementSibling[xss_clean] = ' 格式不正确,请从新输入 ';            }        } };

//密码验证:/^[a-zA-Z0-9_-]{6,16}$/
//再次输入密码只需匹配与上次输入的密码值 是否一致

3.5正则替换replace

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

var str = 'andy和red';var newStr = str.replace('andy', 'baby');console.log(newStr)//baby和red//等同于 此处的andy可以写在正则表达式内var newStr2 = str.replace(/andy/, 'baby');console.log(newStr2)//baby和red//全部替换var str = 'abcabc'var nStr = str.replace(/a/,'哈哈')console.log(nStr) //哈哈bcabc//全部替换gvar nStr = str.replace(/a/a,'哈哈')console.log(nStr) //哈哈bc哈哈bc//忽略大小写ivar str = 'aAbcAba';var newStr = str.replace(/a/gi,'哈哈')//"哈哈哈哈bc哈哈b哈哈"

案例:过滤敏感词汇

 

4.面试题

一、如何让事件先冒泡后捕获

原本的事件流中,是先捕获再冒泡。

对于目标元素来说,如果DOM节点通过addEventListener同时绑定了两个事件监听函数,一个用于捕获,一个用于冒泡,那么两个事件的执行顺序是按照代码添加的顺序执行的。所以,先绑定冒泡的函数,再绑定捕获的函数,即可实现。

对于非目标元素来说,可以给捕获事件的处理程序添加一个定时器,将处理程序推入下一个宏任务执行。

二、说一下事件代理

事件委托是指 不在子节点单独设置事件监听器,而将事件监听器设置在父节点上,再利用冒泡原理使每一个子节点都能触发该事件。

事件委托的优点:只操作一次Dom,提高了程序的性能。

常用于:ul和li标签的事件监听,一般采用事件委托机制将事件监听器绑定在ul上。
还适合动态元素的绑定,新添加的子元素不需单独添加事件处理程序。

(1)了解事件代理吗,这样做有什么好处

事件代理/事件委托:利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的事件,简而言之:事件代理就是说我们将事件添加到本来要添加的事件的父节点,将事件委托给父节点来触发处理函数,这通常会使用在大量的同级元素需要添加同一类事件的时候,比如一个动态的非常多的列表,需要为每个列表项都添加点击事件,这时就可以使用事件代理,通过判断e.target.nodeName来判断发生的具体元素,这样做的好处是减少事件绑定,同事动态的DOM结构任然可以监听,事件代理发生在冒泡阶段

(2)事件委托以及冒泡原理:

事件委托是利用冒泡阶段的运行机制来实现的,就是把一个元素响应事件的函数委托到另一个元素,一般是把一组元素的事件委托到他的父元素上。
委托的优点是减少内存消耗,节约效率动态绑定事件

事件冒泡,就是元素自身的事件被触发后,如果父元素有相同的事件,如onclick事件,那么元素本身的触发状态就会传递,也就是冒到父元素,父元素的相同事件也会一级一级根据嵌套关系向外触发,直到document/window,冒泡过程结束。

(3)事件代理在捕获阶段的实际应用:

可以在父元素层面阻止事件向子元素传播,也可代替子元素执行某些操作。

关于JavaScript高级正则表达式如何理解就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

事件 正则 表达式 字符 元素 输入 用户 用户名 验证 字符串 委托 字母 模式 代理 函数 节点 表单 监听 内容 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江西省青少年网络安全与信息科 炎帝服务器安全吗 万致服务器 戴尔服务器屏幕拉出来推不回去了 安徽专业软件开发按需定制 绿盟科技中国互联网协会 数据库如何把一部分数据导出 数据库系统教程王能斌 宣传网络安全项目推荐理由 软件开发工程师技术工作内容 广东综合网络技术包括什么 大连华为软件开发云 怎样提升管理服务器 马鞍山网络安全大队 手机商业软件开发书籍 朗致软件开发 公司服务器管理外包 lol在广东的服务器云空间 北京合一致远网络技术有限公司 鸿峥网络技术有限公司官网 昆山软件开发多少钱一个月 vba字典怎么汇总数据库 福建企业软件开发厂家 linux服务器端口不亮 农村小学网络安全教育 高级软件开发工程师是职称吗 学软件开发好还是会计好 奉贤区个性化软件开发项目信息 松原网络安全电话 前端软件开发和后端
0