正则之match方法详解
使用
- match一般都要结合RegExp的全局g属性来使用的,这样返回的结果是:匹配到的所有结果的数组;
let str1 = "12345678";let reg1 = /\d{1,3}(\d{3})*/gconsole.log(str1.match(reg1)) // ["123456", "78"]
- 如果不结合g使用,则在没有分组的情况下,只会返回一个匹配结果(或者没有匹配结果时返回null);
let str0 = "12345678";let reg0 = /\d{1,3}/console.log(str0.match(reg0)) // ['123', index: 0, input: '12345678', groups: undefined]
这个例子的结果是没有使用全局匹配的正则表达式的匹配结果。说白了,就是正则表达式的末尾没跟g。由于不适用全局匹配,所以match()方法只找到源字符串中首次匹配的子串后,就立刻得到返回结果,不再比较之后剩余的部分是否还有能匹配上的内容。 我们可以看到,match()的结果是一个数组,该数组一共有4项。各项代表的意思如下:第0项:匹配到字符串第1项:index表示首次匹配上的子串的起始下标。第2项:input,表示源字符串第3项:groups:undefined,这表示当前的正则表达式没使用分组第4项:length,表示匹配到的结果个数,由于这里不使用全局匹配,只找到首次匹配项就结束了,所以匹配结果只有1个,length也就是1。
- . 如果不结合g使用,在有分组的情况下(还要没有开始(^)和结束($)符),则还会返回分组匹配到的内容,例如:
var str = 'Today is the 286th day of 2018, the 108th Thanksgiving Day.';var results = str.match(/\d+(t)(h)/); //匹配str中首个以数字开头,并且以th结尾的子串console.log(results); // ['286th', 't', 'h', index: 13, input: 'Today is the 286th day of 2018, the 108th Thanksgiving Day.', groups: undefined]
match中$符的特性
有$则先匹配末尾,与正则的从走到右,从外到内不同
// 没有$符时,\d{1,3}会先匹配三个数字,(\d{3})*再匹配三个数字。然后\d{1,3}再匹配剩下的78let str1 = "12345678";let reg1 = /\d{1,3}(\d{3})*/gconsole.log(str1.match(reg1)) // ["123456", "78"]// 如果非全局匹配:也先匹配3个数字【此示例涉及到了match的分组,详解看下面】let str2 = "12345678";let reg2 = /\d{1,3}(\d{3})*/console.log(str2.match(reg2))// ["123456", "456", index: 0, input: "12345678", groups: undefined]// 如果有开头符号,也是先匹配3个数字let str3 = "12345678";let reg3 = /^\d{1,3}(\d{3})*/gconsole.log(str3.match(reg3)) // ["123456"]// 我们再来看看有$符时,\d{1,3}就会优先让(\d{3})*先匹配符合的数字,剩下的再由\d{1,3}匹配,这样\d{1,3}就不会先匹配了。let str4 = "12345678";let reg4 = /\d{1,3}(\d{3})*$/gconsole.log(str4.match(reg4)) // ["12345678"]// 匹配结果:["12345678"],345和678是(\d{3})*匹配到的,12是\d{1,3}匹配到的。// 如果同时有开头符^和结束符$:还是先倒着匹配,即先看 (\d{3})* 再看\d{1,3}。这就是$符的特性let str5 = "12345678";let reg5 = /^\d{1,3}(\d{3})*$/gconsole.log(str5.match(reg5)) // ["12345678"]
match的分组
正则中()中代表的是组的含义;
// 示例1:结果中的456则是其中的第一个分组的值let str2 = "12345678";let reg2 = /\d{1,3}(\d{3})*/console.log(str2.match(reg2))// ["123456", "456", index: 0, input: "12345678", groups: undefined]
// 示例2var str = 'Today is the 286th day of 2018, the 108th Thanksgiving Day.';var results = str.match(/\d+(t)(h)/); //匹配str中首个以数字开头,并且以th结尾的子串console.log(results); // ['286th', 't', 'h', index: 13, input: 'Today is the 286th day of 2018, the 108th Thanksgiving Day.', groups: undefined]
示例2分析:
由于该正则表达式为: /\d (t)(h) /,该表达式中使用了小括号(),在此处的作用为分组。所以match()的结果是带有分组特征的。返回的数组包含多个元素,第一个元素是以贪婪模式找到的最长的匹配,之后的元素依次为该匹配中的第一、第二、第三 …个分组匹配到的值,这里有2个分组,所以匹配到的值分别是"t" “h”。
注意:当正则表达式中有开始(^)或者结束($)符号时,则不会体现分组现象
例如:
let str5 = "12345678";let reg5 = /^\d{1,3}(\d{3})*$/gconsole.log(str5.match(reg5)) // ["12345678"]
正则之match方法详解相关推荐
- python正则去掉重复单词_python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解 | 学步园...
在pdf转为文本的时候,经常会多出空格,影响数据观感,因此需要去掉文本中多余的空格,而文本中的英文之间的正常空格需要保留,输入输出如下: input:我今天 赚了 10 个亿,老百姓very happ ...
- python中文字符串多余空格_python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解...
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解 在pdf转为文本的时候,经常会多出空格,影响数据观感,因此需要去掉文本中多余的空格,而文本中的英文之间的正常空格需要保留,输入 ...
- python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解
本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...
- python语言的格式框架_django框架模板语言使用方法详解
本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...
- php中读取大文件实现方法详解
php中读取大文件实现方法详解 来源: 时间:2013-09-05 19:27:01 阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...
- xpath 取标签下所有文字内容_对Xpath 获取子标签下所有文本的方法详解
对Xpath 获取子标签下所有文本的方法详解 在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string ...
- PHP cURL应用实现模拟登录与采集使用方法详解
对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...
- php7自定义异常处理,基于PHP7错误处理与异常处理方法(详解)
PHP7错误处理 PHP 7 改变了大多数错误的报告方式.不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出. 这种 Error 异常可以像 Exception 异常一 ...
- python中search用法_Python中的python re.search方法详解
re.search扫描整个字符串并返回第一个成功的匹配,若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个 ...
最新文章
- Oracle-ORA-01722 invalid number错误
- 怎么样重装系统后能使电脑更快?
- AbsoluteLayout 相框
- Vue中使用Openlayers加载Geoserver发布的TileWMS
- 分布式监控之Zabbix-Server
- 用git提交代码到远程仓库遇到的问题
- TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别
- 计算机用户权限设置 xp,Windows XP权限设置详解 2
- 微型计算机原理与接口技术
- Apple Pay如何使用?全网最完美攻略(图文教程)!
- 2020-09-20
- 基于java springboot记账本微信小程序源码(毕设)
- ubuntu20修改ip地址方法
- 阿里平头哥首次交货——玄铁910是个啥?是芯片吗?
- 【数学建模】2021 年全国大学生数学建模竞赛A题一等奖获奖论文
- 页面置换模拟程序设计
- AirPods 2支持无限充电只要15分钟充满
- ZOOM国际版无法访问 可申领ZOOM平安云版本试用账号了
- 又新又全 |制图符号库、最新市级国土空间总体规划制图规范“GIS符号库“下载
- nvm安装node,但npm和node不识别
热门文章
- vue+element-ui如何为元素设置背景图片
- Pycharm git-创建本地仓库\创建分支\合并分支\回溯版本\加入git后文件颜色代表的含义
- 我们为什么要关注惊喜
- html5全屏动画幻灯片切换,全屏幻灯片切换动画可拖拽
- Linux系统中查看Mysql数据库版本号的四种方法(图文完整版)
- SAP ABAP BADI ACC_DOCUMENT创建财务凭证扩展字段增强
- 王炸DTS空间音效耳机——极度未知HyperX毒刺灵动版游戏无线耳机
- 【平面设计作品】 为热爱做设计,也是我的热爱
- 计算机图形学实验-三维变换
- 【精】合集 zbrush 10种风格女性角色建模 新手教程,zbrush基础教程 案例讲解