JavaScript正则表达式

JavaScript正则表达式

创建正则表达式

使用构造函数

	var 变量 = new RegExp("正则表达式"); // 注意,参数是字符串var 变量 = new RegExp("正则表达式", "匹配模式"); // 注意,两个参数都是字符串

RegExp的意思是 Regular expression。使用typeof检查正则对象,会返回object。

上面的语法中,既可以传一个参数,也可以传两个参数。

创建了正则表达式的对象后,该怎么使用呢?大致分为两个步骤:

  • (1)创建正则表达式的对象 reg。
  • (2)使用 reg 的test() 方法,判断指定字符串是否符合规则。

正则表达式的test()方法:【重要】

	myReg.test(str); // 判断字符串 str 是否符合 指定的 myReg 这个正则表达式的规则

解释:使用test()这个方法可以用来检查一个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false

构造函数 RegExp 中,也可以传两个参数。我们可以传递一个匹配模式作为第二个参数。这个参数可以是:

  • i 忽略大小写。这里的 i 指的是 ignore。
  • g 全局匹配模式。这里的 g 指的是 global。
var pattern = new RegExp("h", 'i')// 定义一个正则表达式:检查一个字符串中是否含有 h
var str1 = "Hello"
var str2 = "world"
// 通过 test()方法,判断字符串是否符合 上面定义的 reg 规则
console.log(pattern.test(str1)) // true
console.log(pattern.test(str2))  // false

使用字面量

	var 变量 = /正则表达式/;  // 注意,这个语法里没有引号var 变量 = /正则表达式/匹配模式;  // 注意,这个语法里没有引号
var pattern = /h/i;
var str1 = "Hello"
var str2 = "world"console.log(pattern.test(str1)) // true
console.log(pattern.test(str2))  // false

总结

以上两种方式都是可以使用的,但是有一下区别

  • 使用构造函数创建时,更加灵活,因为参数中还可以传递变量。
  • 方式二:使用字面量的方式创建,更加简单。

注意

全局匹配 g 慎用test()方法,对于非全局匹配的正则表达式,test()只会检测是否存在某个目标字符串(只要存在就为 true),多次检测的结果都相同

当设置全局标志 /g 时,一旦字符串中还存在匹配,test() 方法都将返回 true,同时匹配成功后将把 lastIndex 属性的值设置为上次匹配成功结果之后的第一个字符所在的位置,下次匹配将从 lastIndex 指示的位置开始;匹配不成功时返回 false,同时将 lastIndex 属性的值重置为 0。

const reg = /test/g;
const str = '_test_test';console.log(reg.test(str)); // true
console.log(reg.lastIndex); // 5console.log(reg.test(str)); // true
console.log(reg.lastIndex); // 10console.log(reg.test(str)); // false
console.log(reg.lastIndex); // 0

正则表达式的使用

规则

下面是正则中常用的一些规则

[]表示:或

  • /[ab]/ 等价于 /a|b/:检查一个字符串中是否包含 a或b

  • /[a-z]/:检查一个字符串那种是否包含任意小写字母

  • /[A-Z]/:任意大写字母

  • /[A-z]/:任意字母

  • /[0-9]/:任意数字

  • /a[bde]c/:检查一个字符串中是否包含 abc 或 adc 或 aec

字符中中的正则

之前我们讲过,在字符串的一些方法中参数是支持正则的

String对象的如下方法,是支持正则表达式的:

方法描述备注
split()将字符串拆分成数组
search()搜索字符串中是否含有指定内容,返回索引 index
match()根据正则表达式,从一个字符串中将符合条件的内容提取出来
replace()将字符串中的指定内容,替换为新的内容并返回
split

split():将一个字符串拆分成一个数组。可以接受一个正则表达式作为参数。

var str = "1a2b3c4d5e6f7g";var result = str.split(/[A-z]/); // 
console.log(result);
// [
//     '1', '2', '3',
//     '4', '5', '6',
//     '7', ''
//   ]
search

search():搜索字符串中是否含有指定内容。如果搜索到指定内容,则会返回第一次出现的索引;否则返回-1。

search()方法可以接受一个正则表达式作为参数,然后会根据正则表达式去检索字符串。serach()只会查找第一个,即使设置全局匹配也没用。

	var str = "hello abc hello aec afc";/** 搜索字符串中是否含有abc 或 aec 或 afc*/result = str.search(/a[bef]c/);console.log(result); // 打印结果:6
match

match():根据正则表达式,从一个字符串中将符合条件的内容提取出来,封装到一个数组中返回(即使只查询到一个结果)。

注意:默认情况下,match()方法只会找到第一个符合要求的内容,找到以后就停止检索。我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容,并以数组的形式返回。

另外,我们可以为一个正则表达式设置多个匹配模式,且匹配模式的顺序无所谓。

代码举例

	var str = "1a2a3a4a5e6f7A8B9C";var result1 = str.match(/[a-z]/);   // 找到符合要求的第一个内容,然后返回var result2 = str.match(/[a-z]/g);  // 设置为“全局匹配”模式,匹配字符串中 所有的小写字母var result3 = str.match(/[a-z]/gi); // 设置多个匹配模式,匹配字符串中 所有的字母(忽略大小写)console.log(result1); // 打印结果:["a"]console.log(result2); // 打印结果:["a", "a", "a", "a", "e", "f"]console.log(result3); // 打印结果:["a", "a", "a", "a", "e", "f", "A", "B", "C"]
replace

replace():将字符串中的指定内容,替换为新的内容并返回。不会修改原字符串。

	新的字符串 = str.replace(被替换的内容,新的内容);

参数解释:

  • 被替换的内容:可以接受一个正则表达式作为参数。
  • 新的内容:默认只会替换第一个。如果需要替换全部符合条件的内容,可以设置正则表达式为全局匹配模式。
	var phoneStr = "13067890123";var phoneReg = /^1[3-9][0-9]{9}$/;console.log(phoneReg.test(phoneStr));

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

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

相关文章

哪个品牌的骨传导耳机好用?精选五大高性能热门骨传导耳机款式推荐!

我作为一名热衷于音乐的数码博主,在选购产品前也习惯于先浏览各种榜单。最近,我发现关于骨传导耳机的讨论热度极高,有人认为骨传导耳机是非常值得入手的新型蓝牙耳机,也有人认为骨传导耳机只是智商税的产品。经过深入调查后&#…

jetbra.zip教程 激活JetBrains全家桶Idea、pyCharm…亲测有效

本教程基于Windows系统 1、下载jetbra.zip 1.1、地址:https://3.jetbra.in/ 1.2、点击随便一个可用站点 1.3、找到左上角蓝色部分,点击下载 1.4、注意软件卡片上右上角支持的版本 1.5、不要关闭网页,留着,要等会用到 2、下载对应…

器件配置比特流或 PDI 设置-7 系列比特流设置

7 系列比特流设置 下表所示 7 系列器件的器件配置设置可搭配 set_property <Setting> <Value> [current_design] Vivado 工具 Tcl 命令一起使用。 注释 &#xff1a; BPI 的比特流设置对于 Spartan -7 器件无效。

自定义数据上的YOLOv9分割训练

原文地址&#xff1a;yolov9-segmentation-training-on-custom-data 2024 年 4 月 16 日 在飞速发展的计算机视觉领域&#xff0c;物体分割在从图像中提取有意义的信息方面起着举足轻重的作用。在众多分割算法中&#xff0c;YOLOv9 是一种稳健且适应性强的解决方案&#xff0…

TinyML之micro_speech语音识别----Feature generation failed解决方案

具体的开发过程网上都有&#xff0c;就不赘述了。 在colab上训练模型&#xff0c;花了将近2小时&#xff0c;得到模型文件后&#xff0c;CV到micro_speech工程里的micro_features_model.cpp里&#xff0c;结果运行报错&#xff1a; Feature generation failed Requested feat…

c++ BSTree二叉搜索树(附原码)

目录 一、概念 二、基本操作 1、插入 2、中序遍历 3、删除 4、查找 5、总结删除 三、应用场景 四、原码 一、概念 左子树比根小&#xff0c;右子树比根大 意义&#xff1a;最多查找高度次数 不需要排序&#xff0c;就达到了二分查找的效率 同时还弥补了单纯数组的插入…

自适应调节Q和R的自适应UKF(AUKF_QR)的MATLAB程序

简述 基于三维模型的UKF&#xff0c;设计一段时间的输入状态误差较大&#xff0c;此时通过对比预测的状态值与观测值的残差&#xff0c;在相应的情况下自适应调节系统协方差Q和观测协方差R&#xff0c;构成自适应无迹卡尔曼滤波&#xff08;AUKF&#xff09;&#xff0c;与传统…

【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

文章目录 5.何为分布式&#xff1f;分布式锁&#xff1f;和微服务关系&#xff1f;5.1何为分布式&#xff1f;5.1.1定义5.1.2例子5.1.3优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点 5.2何为分布式锁&#xff1f;5.2.1定义5.2.2必要性 5.3区分分布式和微服…

TinyVue 3.15.0 正式发布,推出全新的 Charts 图表组件底座,功能更强、图表更丰富!

你好&#xff0c;我是 Kagol。 我们非常高兴地宣布&#xff0c;2024年4月8日&#xff0c;TinyVue 发布了 v3.15.0 &#x1f389;。 TinyVue 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;上一个版本我们推出了业界组件库没有的 MindMap 思维导图组件…

zookeeper启动 FAILED TO START

注意&#xff1a;启动zookeeper时&#xff0c;需要使用zkServer.sh start命令将所有主机启动后&#xff0c;再查看状态 如果&#xff0c;启动一台主机&#xff0c;查看当前主机状态&#xff0c;则会报错 如果出错&#xff0c;进入到$ZOOKEEPER_HOME/logs&#xff0c;查看日志 …

LabVIEW智能变电站监控系统设计与实现

LabVIEW智能变电站监控系统设计与实现 随着电力系统和智能化技术的快速发展&#xff0c;建立一个高效、可靠的变电站监控系统显得尤为重要。通过分析变电站监控系统的需求&#xff0c;设计了一个基于LabVIEW软件的监控平台。该平台利用虚拟仪器技术、传感器技术和无线传输技术…

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …

【论文阅读:Towards Efficient Data Valuation Based on the Shapley Value】

基于Shapley值的高校数据价值评估 主要贡献 提出了一系列用于近似计算Shapley值的高效算法。设计了一个算法&#xff0c;通过实现不同模型评估之间的适当信息共享来实现这一目标,该算法具有可证明的误差保证来近似N个数据点的SV&#xff0c;其模型评估数量为 O ( N l o g ( N…

EPICS DataBase详解

1、分布式EPICS设置 1&#xff09; 操作界面&#xff1a;包括shell命令行方式(caget, caput, camonitor等)和图形界面方式(medm, edm, css等)。 2&#xff09;输入输出控制器(IOC) 2、IOC 1) 数据库&#xff1a;数据流&#xff0c;基本上周期运行 2)sequencer&#xff1a;基…

2024年全国保密宣传教育月的主题是()。A.贯彻落实保密法。你我都是护密人B.国家利益高于一切,保密责任重于泰山C.筑牢保密防线,维护国家安全

2024年全国保密宣传教育月的主题是()。点击查看答案 A.贯彻落实保密法。你我都是护密人B.国家利益高于一切&#xff0c;保密责任重于泰山 C.筑牢保密防线&#xff0c;维护国家安全D.共筑保密防线&#xff0c;公民人人有责 坚持不懈开展保密宣传教育&#xff0c;是保密工作实…

插入法(直接/二分/希尔)

//稳定耗时&#xff1a; 双向冒泡&#xff0c;可指定最大最小值个数MaxMinNum<nsizeof(Arr)/sizeof(Arr[0]), void BiBubbleSort(int Arr[],int n&#xff0c;int MaxMinNum){int left0,rightn-1;int i;bool notDone true;int temp;int minPos;while(left<right&&am…

图像处理--空域滤波增强(原理)

一、均值滤波 线性滤波算法&#xff0c;采用的主要是邻域平均法。基本思想是使用几个像素灰度的某种平均值来代替一个原来像素的灰度值。可以新建一个MN的窗口以为中心&#xff0c;这个窗口S就是的邻域。假设新的新的像素灰度值为&#xff0c;则计算公式为 1.1 简单平均法 就是…

LeetCode 234.回文链表

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff…

PWN入门之Stack Overflow

Stack Overflow是一种程序的运行时&#xff08;runtime&#xff09;错误&#xff0c;中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数&#xff0c;导致与其相邻的栈中的变量值被改变。 在本篇文章中&#xff…

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet

无论是基于成本效益还是社区支持&#xff0c;我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具&#xff1a;Kaldi&#xff0c;Paddle&#xff0c;WeNet&#xff0c;EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具&#xff0c;由Daniel Pove…