APIs -- DOM正则表达式

news2024/11/17 21:42:04

1. 介绍

  • 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象
  • 通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式。
  • 正则表达式在JavaScript中的使用场景:
    1. 例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配),比如用户名: /^ [a-z0-9_-]{3,16}$/
    2. 过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等

2. 语法

分两步:

  1. 定义规则
  2. 查找

2.1 定义正则表达式语法

语法:const 变量名 = /表达式/

其中/ /是正则表达式字面量

//比如
const reg = /前端/

2.2 检测是否匹配

test()方法 用来查看正则表达式与指定的字符串是否匹配
语法:regObj.test(被检测的字符串 )

//比如:
// 要检测的字符串
const str = 'IT培训,前端开发培训,IT培训课程,web前端培训,Java培训,人工智能培训'
// 1.定义正则表达式,检测规则
const reg = /前端/
// 2.检测方法
console.log(reg.test(str)) // true

检索(查找)符合规则的字符串
exec()方法在一个指定字符串中执行一个搜索匹配
语法:regobj.exec(被检测字符串 )

//比如:
//要检测的字符串
const str ='IT培训,前端开发培训,IT培训课程,web前端培训,Java培训,人工智能培训'
// 1.定义正则表达式,检测规则
const reg = /前谈/
// 2.检测方法
console.log(reg.exec(str)) // 返网的是数组

如果匹配成功,exec()方法返回一个数组,否则返回null

3. 元字符

  • 普通字符:
    大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字也就是说普通字符只能够匹配字符串中与它们相同的字符。

  • 元字符(特殊字符):
    是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能

    1. 比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm…
    2. 但是换成元字符写法: [a-z]
  • 参考文档:

    1. MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
    2. 正则测试工具: http://tool.oschina.net/regex

分类:

  1. 边界符(位置符)用来提示字符所处的位置,主要有两个字符 (表示位置,开头和结尾,必须用什么开头,用什么结尾)
    • ^ 表示匹配行首的文本(以谁开始)
    • $ 表示匹配行尾的文本(以谁结束)
    • 如果^和$在一起,表示必须是精确匹配
// 元字符

     console.log(//.test('哈')) // true
     console.log(//.test('哈哈')) // true
     console.log(//.test('二哈')) // true
     console.log('------------------')
     // 1. 边界符
     console.log(/^哈/.test('哈')) // true
     console.log(/^哈/.test('哈哈')) // true
     console.log(/^哈/.test('二哈')) // flase
     console.log(/^哈$/.test('哈')) // true  只有这种情况为true 否则全是false
     console.log(/^哈$/.test('哈哈')) // false
     console.log(/^哈$/.test('二哈')) // false

  1. 量词是用来设定某个模式出现的次数(表示重复次数)
    在这里插入图片描述
    逗号左右两侧千万不能有空格
  //  量词 * 类似 >=0 次
    console.log(/^哈$/.test('哈')) // true
    console.log(/^哈*$/.test('')) // true
    console.log(/^哈*$/.test('哈')) // true
    console.log(/^哈*$/.test('哈哈')) // true
    console.log(/^哈*$/.test('二哈很傻')) //  false
    console.log(/^哈*$/.test('哈很傻')) //  false
    console.log(/^哈*$/.test('哈很哈')) // false
    console.log('------------------')
    //  量词 + 类似 >=1 次
    console.log(/^哈$/.test('哈')) // true
    console.log(/^哈+$/.test('')) // false
    console.log(/^哈+$/.test('哈')) // true
    console.log(/^哈+$/.test('哈哈')) // true
    console.log(/^哈+$/.test('二哈很傻')) //  false
    console.log(/^哈+$/.test('哈很傻')) //  false
    console.log(/^哈+$/.test('哈很哈')) // false

    console.log('------------------')
    

    //  量词 ? 类似  0 || 1
    console.log(/^哈?$/.test('')) // true
    console.log(/^哈?$/.test('哈')) // true
    console.log(/^哈?$/.test('哈哈')) // true
    console.log(/^哈?$/.test('二哈很傻')) //  false
    console.log(/^哈?$/.test('哈很傻')) //  false
    console.log(/^哈?$/.test('哈很哈')) // false


    // 量词 {n} 写几,就必须出现几次
    console.log(/^哈{4}$/.test('哈'))  //  false
    console.log(/^哈{4}$/.test('哈哈')) //  false
    console.log(/^哈{4}$/.test('哈哈哈')) //  false
    console.log(/^哈{4}$/.test('哈哈哈哈'))// true
    console.log(/^哈{4}$/.test('哈哈哈哈哈')) // false
    console.log(/^哈{4}$/.test('哈哈哈哈哈哈')) // false
    console.log('------------------')
    
    // 量词 {n,}   >=n
    console.log(/^哈{4,}$/.test('哈')) // false
    console.log(/^哈{4,}$/.test('哈哈')) // false
    console.log(/^哈{4,}$/.test('哈哈哈')) // false
    console.log(/^哈{4,}$/.test('哈哈哈哈'))// true
    console.log(/^哈{4,}$/.test('哈哈哈哈哈'))// true
    console.log(/^哈{4,}$/.test('哈哈哈哈哈哈'))// true
    console.log('------------------')
    
    // 量词 {n,m}  逗号左右两侧千万不能有空格    >=n && <= m
    console.log(/^哈{4,6}$/.test('哈'))// false
    console.log(/^哈{4,6}$/.test('哈哈'))// false
    console.log(/^哈{4,6}$/.test('哈哈哈'))// false
    console.log(/^哈{4,6}$/.test('哈哈哈哈'))// true
    console.log(/^哈{4,6}$/.test('哈哈哈哈哈'))// true
    console.log(/^哈{4,6}$/.test('哈哈哈哈哈哈'))// true
    console.log(/^哈{4,6}$/.test('哈哈哈哈哈哈哈'))// false
    console.log('------------------')
    
    // 字符类   [abc]  只选1个
    console.log(/^[abc]$/.test('a'))  // true
    console.log(/^[abc]$/.test('b'))  // true
    console.log(/^[abc]$/.test('c'))  // true
    console.log(/^[abc]$/.test('ab'))  // false
    console.log(/^[abc]{2}$/.test('ab'))  // true
    console.log('------------------')
    
    // 字符类   [a-z]  只选1个
    console.log(/^[A-Z]$/.test('p'))  // false
    console.log(/^[A-Z]$/.test('P'))  // true
    console.log(/^[0-9]$/.test(2))  // true
    console.log(/^[a-zA-Z0-9]$/.test(2))  // true
    console.log(/^[a-zA-Z0-9]$/.test('p'))  // true
    console.log(/^[a-zA-Z0-9]$/.test('P'))  // true
    console.log('------------------')
  1. 字符类 (比如\d 表示0~9)
    (1) [] 匹配字符集合

    后面的字符串只要包含 abc 中任意一个字符,都返回 true。

    // 只要中括号里面的任意字符出现都返回为true
    console.log(/[abc]/.test( ' andy'))// true
    console.log(/[abc]/.test('baby'))// true
    console.log(/[abc]/.test('cry'))// true
    console.log(/[abc]/.test('die'))// false
    

(2) [] 里面加上 - 连字符

使用连字符 - 表示一个范围

console.log(/ ^ [a-z]$/.test('c')) // true

比如:
[a-z] 表示a 到 z 26个英文字母都可以

[a-zA-Z] 表示大小写都可以

[0-9] 表示0~9 的数字都可以

腾讯QQ: ^[1-9][8-9]{4,}$ (腾讯QQ号从10000开始

注意:

  1. []里面加上 ^ 代表取反符号
    eg:[^ a-z]匹配除了小写字母以外的字符
  2. **.**匹配除换行符之外的任何单个字符

(3)预定义:指的是某些常见模式的简写方式

  • \d 匹配0-9之间的任一数字,相当于[0-9]
  • \D 匹配所有0-9以外的字符,相当于 [^0-9]
  • \w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
  • \W 除所有字母、数字和下划线以外的字符,相当于 [^A-Za-z0-9_]
  • \s 匹配空格 (包括换行符、制表符、空格符等),相等于[\t\rtn\w\f]
  • \S 匹配非空格的字符,相当于 [^\t\r\n\v\f]

日期格式:^\d{4}-ld{1,2}-\d{1,2]$

4. 修饰符

修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等

语法:/表达式/修饰符

i 是单词 ignore 的缩写,正则匹配时字母不区分大小写
g 是单词global的缩写,匹配所有满足正则表达式的结果

console.log(/a/i.test('a')) //true
console.log(/a/i.test( 'A')) // true

替换 replace 替换
语法:字符串.replace(/正则表达式/,'替换的文本')


<body>
  <textarea name="" id="" cols="30" rows="10"></textarea>
  <button>发布</button>
  <div></div>
  <script>
    const tx = document.querySelector('textarea')
    const btn = document.querySelector('button')
    const div = document.querySelector('div')
    btn.addEventListener('click', function () {
      // console.log(tx.value)
      div.innerHTML = tx.value.replace(/傻逼|牛逼/g, '**')
      tx.value = ''
    })
  </script>
</body>

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

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

相关文章

数据库的实际操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、关系模型二、数据库的操作 创建数据库查看数据库选择数据库删除数据库三、MySQL 数据库命名规范总结 一、关系模型 关系数据库是建立在关系模型上的。而关系模…

flutter学习之旅(一)

初学Flutter flutter官网和中文开发手册 安装flutter - windows 官方文档-windows flutter_windows_3.7.9-stable.zip 编辑环境变量 在 用户变量 一栏中&#xff0c;检查是否有 Path 这个条目&#xff1a; 如果存在这个条目&#xff0c;以 ; 分隔已有的内容&#xff0c;加入 f…

物联网能源能耗之场景控制原理

物联网能源能耗系统利用物联网技术&#xff0c;可帮助企业构建能耗分布&#xff0c;帮助操作人员实时监控各类关键参数&#xff0c;计算关键环节的能耗指标&#xff0c;和既定的能耗基线进行对比&#xff0c;得出能耗差距。 对于制造企业而言&#xff0c;物联网能源能耗不仅能…

商业策划的基本功:竞品分析

商业策划的基本功&#xff1a;竞品分析 商业的三个视角&#xff1a;用户&#xff0c;竞争&#xff0c;自己 有方法会更有效 趣讲大白话&#xff1a;磨刀不误砍柴工 【趣讲信息科技138期】 **************************** 世界上如果只有一种矿泉水 就不会竞争 就不会有农夫山泉这…

由世纪互联运营的Microsoft Teams携创新功能正式发布,夯实“企业数字中枢”

2023年4月18日&#xff0c;北京——今日&#xff0c;微软宣布由世纪互联运营的Microsoft Teams推出一系列创新功能&#xff0c;围绕企业数字核心能力&#xff0c;赋能数字化协作空间、智能化协作体验、整合生产力工具和工作流、安全合规、构建团队文化等五大落地场景&#xff0…

基于重要抽样技术的非序贯蒙特卡洛法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

前端学习:HTML响应式设计、计算机代码、语义元素

目录 HTML响应Web设计 一、什么是响应式Web设计&#xff1f; 1.流体网格 2.媒体查询 3.响应媒体 4.视口元标记 二、使用Bootstrap HTML计算机代码元素 HTML 语义元素 一、什么是语义元素 二、HTML5中的新的语义元素 HTML响应Web设计 一、什么是响应式Web设计&…

现在学习Java,还有出路吗?

当然有出路&#xff0c;Java一直都是市场占有率最高的编程语言&#xff0c;我们生活涉及到的方方面面都有Java的身影&#xff0c;Java基本也覆盖了所有的行业。同时Java自身也是不断在升级更新&#xff0c;平均一年半左右进行一次&#xff0c;而未来的发展还会更加的强势。 随…

Mysql安装步骤

1、解压服务端Mysql安装包 解压之后的目录就是以上这样的。 2.复制改变my.ini文件 把my.ini文件添加到目录中去 [mysql] # 设置mysql客户端默认字符集 default-character-setutf8 [mysqld] #设置3306端口 port 3306 # 设置mysql的安装目录 basedirE:/mysql/mysql-8.0.18-wi…

Spring AOP核心概念与操作示例

AOP 核心概念 还记得我们Spring有两个核心的概念嘛&#xff1f;一个是IOC/DI&#xff0c;另一个是AOP咯。 先来认识两个概念&#xff1a; AOP(Aspect Oriented Programming)面向切面编程&#xff1b;作用&#xff1a;在不惊动原始设计的基础上为其进行功能增强&#xff0c;类…

Linux命令行操作/选项介绍,文件分类/内容与属性/绝对相对路径,隐藏文件与整个目录结构

Linux的命令行操作介绍 Linux操作的特点&#xff1a;纯命令行&#xff0c;当然Linux它也有图形化界面或桌面版。Windows也有命令行&#xff0c;也有图形化界面。不过它是面向普通客户的操作系统&#xff0c;所以必须得是好用好玩的&#xff0c;所以图形化界面那是必然。无论是…

PCL点云库(2) - IO模块

目录 2.1 IO模块接口 2.2 PCD数据读写 &#xff08;1&#xff09; PCD数据解析 &#xff08;2&#xff09;PCD文件读写示例 2.3 PLY数据读写 &#xff08;1&#xff09;PLY数据解析 &#xff08;2&#xff09;PLY文件读写示例 2.4 OBJ数据读写 &#xff08;1&#xff…

网易云信 RTC 音频 QoS 综述

RTC、QoS、WebRTC 的定义 RTC 实时通信&#xff0c;泛指各种数据的实时传输技术&#xff0c;包括音频&#xff0c;视频&#xff0c;文本&#xff0c;图片等媒体和非媒体数据的实时传输。 QoS 服务质量&#xff0c;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信…

狂买GPU、四处挖人,马斯克:我要做理解宇宙的TruthGPT

来源: 爱范儿 微信号&#xff1a;ifanr 整理 | 凌敏、核子可乐 上个月&#xff0c;马斯克还积极呼吁叫停超强 AI 研发 6 个月&#xff0c;现在就坐不住了&#xff1f; 马斯克声称正在研究 TruthGPT 近日&#xff0c;马斯克在接受福克斯新闻频道的塔克卡尔森采访时宣布&#…

小红书投放预算如何制定,品牌规划

进行产品与品牌推广是一件相对复杂而全面的事。以小红书为例&#xff0c;当我们在制定产品投放传播方案时&#xff0c;确定平台投放预算是首要的。今天将为大家分享&#xff0c;如何制定小红书投放预算最为合理高效。 一、目的决定预算 在说明具体的预算计算方法之前&#xff0…

[数据库]MySQL窗口函数

1.窗口函数是什么 玛雅人造不出轮子,也不需要轮子. 在学完基础以后,通过子查询和聚合函数,理论上可以解决任何复杂的sql查询问题,但是人类发明出来轮子绝对不是用来看着它转圈的. 窗口函数和聚合函数非常相似,区别在于聚合函数是将多个行结合成一个结果,而窗口函数是以某个区…

webrtc janus服务器部署在公网,coturn转发媒体流

janus本身部署在公网时&#xff0c;其内部使用的libnice库已经实现了stun的功能&#xff0c;在配置文件janus.jcfg里面&#xff0c;nat_1_1_mapping配置成公网地址&#xff0c;其位于NAT后面的局域网客户端之间可以实现媒体流之间的分享&#xff0c;发布者将媒体流推到公网&…

【网络】-- https协议

目录 http协议 https协议 安全 概念 什么是"加密"&#xff1f; 为什么要加密&#xff1f; 常见的加密方式 对称加密 非对称加密 数据摘要 && 数据指纹 数字签名 HTTPS 的工作过程探究 方案一&#xff1a;只使用对称加密 方案二&#xff1a;只使…

深眸科技|制造行业升级速度加快,2D视觉与3D视觉该如何选择?

随着人工智能的不断发展&#xff0c;机器视觉已经成为当下最炙手可热的技术之一。在制造业转型升级并且迅猛发展的过程中&#xff0c;对于产品的高精度、零缺陷的需求也在不断提升&#xff0c;而机器视觉的出现为制造业产业升级提供了强有力的驱动力。 随着5G、AI等技术的不断…

174_技巧_Power BI 动态格式(万|亿)

174_技巧_Power BI 动态格式(万|亿) 一、背景 Power BI 2023年4月份更新&#xff0c;新增加了一个预览功能&#xff1a;动态格式(Dynamic format strings for measures)&#xff0c;度量值的结果可以动态的显示为不同的格式。 今天我们主要来看一个技巧&#xff0c;如何在 P…