正则表达式【JavaScript】

JavaScript的正则表达式(Regular Expressions,简称Regex或RegExp)是一种强大的工具,用于匹配字符串中的模式。正则表达式包含许多元字符(Metacharacters),这些元字符用于定义模式的结构。

一、元字符

以下是一些常用的JavaScript正则表达式元字符及其含义:

1. 基本元字符

  • .:匹配除换行符之外的任何单个字符。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配单词边界(单词的开头或结尾)。
  • \B:匹配非单词边界。

2. 字符类

  • [...]:匹配字符集中的任何一个字符。例如,[abc] 匹配 ab 或 c
  • [^...]:匹配不在字符集中的任何一个字符。例如,[^abc] 匹配除了 abc 之外的任何一个字符。
  • \d:匹配任何一个数字字符(等价于 [0-9])。
  • \D:匹配任何一个非数字字符(等价于 [^0-9])。
  • \w:匹配任何一个字母、数字或下划线字符(等价于 [A-Za-z0-9_])。
  • \W:匹配任何一个非字母、数字或下划线字符(等价于 [^A-Za-z0-9_])。
  • \s:匹配任何一个空白字符(包括空格、制表符、换页符等)。
  • \S:匹配任何一个非空白字符。

3. 量词

  • *:匹配前面的元素零次或多次。
  • +:匹配前面的元素一次或多次。
  • ?:匹配前面的元素零次或一次。
  • {n}:匹配前面的元素正好 n 次。
  • {n,}:匹配前面的元素至少 n 次。
  • {n,m}:匹配前面的元素至少 n 次,但不超过 m 次。

4. 分组和捕获

  • (...):分组并捕获匹配的子表达式。
  • (?:...):分组但不捕获匹配的子表达式。
  • (?=...):正向前瞻,匹配但不在结果中包含。
  • (?!...):负向前瞻,匹配但不在结果中包含。
  • (?<=...):正向后顾,匹配但不在结果中包含。
  • (?<!...):负向后顾,匹配但不在结果中包含。

5. 常用转义字符

  • \\:匹配反斜杠字符。
  • \n:匹配换行符。
  • \t:匹配制表符。
  • \r:匹配回车符。
  • \f:匹配换页符。

6. 其他元字符

  • |:或操作符,匹配两者之一。例如,a|b 匹配 a 或 b

7. 示例:

为了更好地理解这些正则表达式元字符和方法,我们可以通过具体的JavaScript实例来说明。

实例1: 使用 ., ^, 和 $

let str = "hello";// 使用 . 匹配任意字符
console.log(/./.test(str)); // true,因为 . 可以匹配任意字符// 使用 ^ 匹配字符串开始的位置
console.log(/^h/.test(str)); // true,因为字符串以 'h' 开头// 使用 $ 匹配字符串结束的位置
console.log(/o$/.test(str)); // true,因为字符串以 'o' 结尾

实例2: 使用 \w\W\d\D\s\S

let str = "Hello_123!";// 使用 \w 匹配数字、字母和下划线
console.log(/\w/.test(str)); // true,因为 'H' 是字母// 使用 \W 匹配非数字和字母
console.log(/\W/.test(str)); // true,因为 '!' 是非数字和字母// 使用 \d 匹配数字
console.log(/\d/.test(str)); // true,因为 '1' 是数字// 使用 \D 匹配非数字
console.log(/\D/.test(str)); // true,因为 'H' 是非数字// 使用 \s 匹配空白字符
console.log(/\s/.test(str)); // false,因为没有空白字符// 使用 \S 匹配非空白字符
console.log(/\S/.test(str)); // true,因为 'H' 是非空白字符

实例3: 使用 [][^a-z]+*?

let str = "Hello123!";// 使用 [] 匹配里面的任意字符
console.log(/[a-z]/.test(str)); // true,因为 'e' 是小写字母// 使用 [^a-z] 匹配除a到z之外的所有字符
console.log(/[^a-z]/.test(str)); // true,因为 'H' 不是小写字母// 使用 + 匹配重复一次或者多次
console.log(/l+/.test(str)); // true,因为 'll' 是重复的 'l'// 使用 * 匹配重复0次或者多次
console.log(/x*/.test(str)); // true,因为 'x' 可以重复0次// 使用 ? 匹配重复1次或者是0次
console.log(/H?/.test(str)); // true,因为 'H' 出现1次

实例4: 使用 ()|?:?=?!?<=?<!{4,8}

let str = "Hello123!";// 使用 () 分组匹配
console.log(/(l)/.test(str)); // true,因为 'l' 被分组匹配// 使用 | 或者
console.log(/H|e/.test(str)); // true,因为 'H' 或 'e' 存在// 使用 ?: 分组匹配不捕获
console.log(/(?:l)/.test(str)); // true,但不会捕获 'l'// 使用 ?= 正向肯定预查
console.log(/H(?=e)/.test(str)); // true,因为 'H' 后面是 'e',但不匹配 'e'// 使用 ?! 正向否定预查
console.log(/H(?!x)/.test(str)); // true,因为 'H' 后面不是 'x'// 使用 ?<= 反向肯定预查
console.log(/(?<=H)e/.test(str)); // true,因为 'e' 前面是 'H',但不匹配 'H'// 使用 ?<! 反向否定预查
console.log(/(?<!x)e/.test(str)); // true,因为 'e' 前面不是 'x'// 使用 {4,8} 最少4位 最多8位匹配
console.log(/[a-z]{4,8}/.test(str)); // true,因为 'Hello' 符合4到8位的条件

实例5: 使用 test()exec()match()search()replace()

let str = "Hello, World!";// 使用 test()
console.log(/Hello/.test(str)); // true,因为 'Hello' 存在于字符串中// 使用 exec()
let result = /Hello/.exec(str);
console.log(result); // ["Hello"],返回匹配的数组// 使用 match()
console.log(str.match(/Hello/)); // ["Hello"],返回匹配的数组// 使用 search()
console.log(str.search(/Hello/)); // 0,返回第一个匹配的位置// 使用 replace()
console.log(str.replace(/Hello/, "Hi")); // "Hi, World!",替换了 'Hello' 为 'Hi'

这些实例展示了如何使用JavaScript中的正则表达式来匹配和操作字符串。理解这些元字符和方法可以帮助你更有效地处理字符串操作。

二、正则表达式案例

1. 检查用户名格式

<script>
function checkUser(str) {// 模式var re = /^[a-zA-Z][a-zA-Z0-9_]{3,15}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkUser('h111')); // 正确
console.log(checkUser('1h111')); // 错误
</script>

2. 检查邮箱格式

<script>
function checkEmail(str) {// 模式var re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkEmail('example@example.com')); // 正确
console.log(checkEmail('example@example')); // 错误
</script>

3. 检查电话号码格式(仅限数字)

<script>
function checkPhone(str) {// 模式var re = /^\d{10}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkPhone('1234567890')); // 正确
console.log(checkPhone('123456789')); // 错误
</script>

4. 检查密码格式(至少一个大写字母、一个小写字母、一个数字、一个特殊字符,长度为8到20)

<script>
function checkPassword(str) {// 模式var re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkPassword('Password1!')); // 正确
console.log(checkPassword('password')); // 错误
</script>

5. 检查URL格式

<script>
function checkURL(str) {// 模式var re = /^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkURL('http://example.com')); // 正确
console.log(checkURL('example.com')); // 错误
</script>

6. 检查日期格式(YYYY-MM-DD)

<script>
function checkDate(str) {// 模式var re = /^\d{4}-\d{2}-\d{2}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkDate('2024-10-07')); // 正确
console.log(checkDate('2024-10-7')); // 错误
</script>

7. 检查IP地址格式

<script>
function checkIP(str) {// 模式var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/g;if (re.test(str)) {// 进一步检查每个部分是否在0到255之间var parts = str.split('.');if (parts.every(part => part >= 0 && part <= 255)) {return '正确';} else {return '错误';}} else {return '错误';}
}
console.log(checkIP('192.168.1.1')); // 正确
console.log(checkIP('192.168.1')); // 错误
console.log(checkIP('256.168.1.1')); // 错误
</script>

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

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

相关文章

计算机组成原理之浮点数的加减运算

计算机组成原理之浮点数的加减运算主要涉及以下几个步骤&#xff1a; 1、对阶&#xff1a;由于浮点数的阶码不同&#xff0c;小数点位置不同&#xff0c;不能直接进行尾数加减。首先求两数阶码之差&#xff0c;通过小数阶向大数阶看齐的原则&#xff0c;对阶码小的尾数进行移位…

vSAN06:ESA与OSA对比、ESA安装、新架构、工作方式、自动策略管理、原生快照、数据压缩、故障处理

目录 vSAN ESAvSAN ESA 安装ESA新架构ESA工作方式ESA自动策略管理自适应RAID5策略 原生快照支持数据压缩的改进ESA故障处理 vSAN ESA vSAN ESA 安装 流程和OSA完全一致&#xff0c;但要注意要勾选启用vSAN ESA ESA和OSA的底层架构不一样&#xff0c;但是UI上是一致的。 生产环…

【2024最新】华为HCIE认证考试流程

HCIE是华为认证体系中最高级别的ICT技术认证&#xff0c;表示通过认证的人具有ICT领域专业知识和丰富实践经验。 HCIE认证方向&#xff1a;最高认证级别HCIE的技术方向有13个 下面以HCIE-Datacom为例给大家介绍一下&#xff1a; HCIE-Datacom认证考试流程&#xff1a; 1.笔试…

Hive3.x版本调优总结

文章目录 第 1 章 Explain 查看执行计划&#xff08;重点&#xff09;1.1 创建测试用表1&#xff09;建大表、小表和 JOIN 后表的语句2&#xff09;分别向大表和小表中导入数据 1.2 基本语法1.3 案例实操 第 2 章 Hive 建表优化2.1 分区表2.1.1 分区表基本操作2.1.2 二级分区2.…

Ubuntu22——安装并配置局域网文件共享系统Samba

我们将共享目录设置为 /home/takway/share。以下是基于这个新目录的详细步骤&#xff1a; 在Ubuntu上安装并配置Samba 更新系统包列表 打开终端&#xff0c;执行以下命令来确保你的包列表是最新的&#xff1a; sudo apt update安装Samba 安装Samba及其相关工具&#xff1a; sud…

软件都用哪些编程语言写的?

一句话总结编程语言 编程语言千千万&#xff0c;每种语言都有自身独特的魅力。 一句话总结 C语言简洁自然、灵活又可怕。 C是C的超集&#xff0c;类型严格&#xff0c;泛型模板强大至极&#xff0c;博大精深很难摸透。 Java是更安全的C&#xff0c;跨平台中间件的老大哥。 C#为…

vmvare虚拟机centos 忘记超级管理员密码怎么办?

vmvare虚拟机centos 忘记超级管理员密码怎么办?如何重置密码呢? 一、前置操作 重启vmvare虚拟机的过程中,长按住Shift键 选择第一个的时候,按下按键 e 进入编辑状态。 然后就会进入到类似这个界面中。 在下方界面 添加 init=/bin/sh,然后按下Ctrl+x进行保存退出。 init=/bi…

深入探索Vue3组合式API

目录 组合式API的好处 Vue3有哪些生命周期&#xff1f; Vue2.X 和 Vue3.X对比 watch 和 watchEffect 的区别&#xff1f; 1.watch 2.watchEffect watch和watchEffect的对比 ref 与 reactive 的区别&#xff1f; 定义 主要特点 基本用法 与 组件定义 生命周期钩子…

openstack底层创建虚拟机快照和导出快照、浅谈dashboard中主机聚合和可用域的关系

文章目录 openstack底层创建虚拟机快照和导出快照说明获取虚拟机的uuid创建快照导出快照到本地浅谈dashboard中主机聚合和可用域的关系说明主机聚合可用域openstack底层创建虚拟机快照和导出快照 说明 为什么要到底层用命令创建虚拟机快照? 1、dashboard中直接创建快照失败;…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…

昇思学习打卡营第31天|深度解密 CycleGAN 图像风格迁移:从草图到线稿的无缝转化

1. 简介 图像风格迁移是计算机视觉领域中的一个热门研究方向&#xff0c;其中 CycleGAN (循环对抗生成网络) 在无监督领域取得了显著的突破。与传统需要成对训练数据的模型如 Pix2Pix 不同&#xff0c;CycleGAN 不需要严格的成对数据&#xff0c;只需两类图片域数据&#xff0c…

【网络】web1.0 2.0 3.0各自出现背景/技术原理/演化发展过程,以及Web 3.0 对传统互联网的影响

一、web1.0 2.0 3.0各自出现背景/技术原理/演化发展过程 互联网自诞生以来&#xff0c;经历了三个主要的发展阶段&#xff1a;Web 1.0、Web 2.0 和 Web 3.0&#xff0c;每个阶段都有其独特的特点和影响。 1、Web 1.0 Web 1.0 是互联网的初始阶段&#xff0c;大约从1990年代到…

IDEA:增加类注释模板和方法注释模板

文章目录 概要配置类注释模板配置方法模版 概要 配置类注释和方法注释 配置类注释模板 点击setting->Editor->File and Code Templates&#xff0c;然后找到Class&#xff0c;如下图&#xff1a; 注意勾掉Reformat according to style&#xff0c;否则会格式化。 注…

动态规划算法专题(四):子串、子数组系列

目录 1、最大子数组和 1.1 算法原理 1.2 算法代码 2、环形子数组的最大和 2.1 算法原理 2.2 算法代码 3、乘积最大子数组 3.1 算法原理 3.2 算法代码 4、乘积为正数的最长子数组长度 4.1 算法原理 4.2 算法代码 5、等差数列划分 5.1 算法原理 5.2 算法代码 6、…

COSPLAY大赛静态HTML网页模板源码

源码名称&#xff1a;COSPLAY大赛静态HTML网页模板 源码介绍&#xff1a;一款cosplay大赛HTML网页模板源码&#xff0c;过往参赛选手会自动从腾讯大赛获取&#xff0c;可用于cosplay大赛&#xff0c;漫展等。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.5188…

vue2路由和vue3路由区别及原理

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中&#xff0c;通过 Vue.use() 注册路由插件&#xff0c;并通过 new VueRouter() 来创建路由实例。 import Vue from vue;import VueRouter from vue-router;import Home from /components/Home.vue;​Vue.us…

如何减少网络安全事件的损失

为了减轻网络安全事件的损失&#xff0c;可以采取以下多项措施&#xff1a; 一、数据备份与恢复 定期备份数据&#xff1a;包括文件、数据库和系统映像等&#xff0c;确保在发生安全事件时&#xff0c;能够快速恢复数据和系统&#xff0c;从而减少损失。制定恢复计划&#xf…

k8s的控制节点不能访问node节点容器的ip地址

master控制node服务器添加容器后,访问不了该node服务器容器的ip,只能在node服务器访问 排查后发现是k8s的master服务器和node节点的网址网段和k8s初始化时提示的ip网段不一致 我之前是192.168.137.50, 实际上master主机期望的是192.168.1.50 解决方案: 1.删除服务器后重建ma…

使用iTextPDF库时,设置文字为中文格式

在使用iTextPDF库时&#xff0c;设置文字为中文格式主要涉及选择合适的中文字体&#xff0c;并确保该字体能够正确渲染中文字符。由于iTextPDF的内置字体通常不支持中文&#xff0c;因此你需要加载一个支持中文的字体文件&#xff08;如TrueType字体&#xff0c;.ttf文件&#…

SpringCloud入门(十二)全局过滤器和跨域

一、全局过滤器 全局过滤器的作用也是处理一切进入网关的请求和微服务响应&#xff0c;与GatewayFilter的作用一样。 区别在于GatewayFilter通过配置定义&#xff0c;处理逻辑是固定的&#xff0c;如果我们希望拦截请求&#xff0c;做自己的业务逻辑则没办法实现。而GlobalFilt…