javascript–正则表达式

javascript–正则表达式

正则表达式

var expression = / pattern / flags;

flags:每个正则表达式都可带一个或多个标志,用以标明正则表达式的行为

  • g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止。

  • i:表示不区分大小写模式

  • m:表示多行模式,即在到达文本末尾时还会继续查找下一行中是否与模式匹配的项。

正则表达式中的元字符

这些元字符在正则表达式都有一种或者多种用途。因此如果想要匹配字符串中包含的这些字符必须转义。下面将描述元字符在模式中的各种应用。

( [ { \ ^ $ | ) ? * .] }

字符 含义
\t 水平制表符
\n 换行符
\r 回车符
\f 换页符
\cX 与X对应的控制字符(Ctrl+X)
\v 垂直制表符
\0 空字符

所谓类是指,符合某些特征的对象,是一个泛指,而不是特指某个字符。

使用元字符[ ]构建类。

1.[ ]:构建简单类

[abc]
图片描述
2.^:与[ ]并用构建反向类

[^abc]
图片描述

3.范围类
[a-zA-Z]
图片描述

边界

单独使用^代表以xxx开头

边界元字符
^ 以xxx开头
$ 以xxx结尾
\b 单词边界
\B 非单词边界

^ab
图片描述
ab$
图片描述
\ba
图片描述
a\b
图片描述

元字符|代表或

a|c
图片描述

预定义类

字符 等价类
. 1 除了回车符和换行符之外的所有字符
\d [0-9] 数字字符
\D 2 非数字字符
\s [\t\n\x0B\f\r] 空白符
\S 3 非空白符
\w [a-zA-Z_0-9] 单词字符,字母、数字下划线
\W 4 非单词字符

分组

使用元字符( )进行分组

(ab)
图片描述
嵌套分组(捕获组):(ab(cd))
图片描述
忽略分组:有时候我们不希望捕获某些分组,只需要在分组内加上 ?:就可以了,这并不意味着该分组内容不属于正则表达式,只是不会给这个分组加编号了而已
(ab(?:cd))
图片描述

量词

代表出现次数,次数都为正整数

量词元字符
? 出现0次或1次 [0,1]
+ 至少出现1次 >=1
* 出现0次或多次 >=0

{ }元字符
{n} :出现n次
{n,m} :出现n到m次
{n,} :至少出现n次
{0,m} :最多出现m次

贪婪模式与非贪婪模式

{3,5}到底代表匹配3次,4次还是5次呢?在贪婪模式下会尽可能的多的匹配,也就是说会匹配5次,默认是贪婪模式。而在非贪婪模式下则尽可能少的匹配,也就说会匹配3次,在量词后面加上?即可

贪婪模式'123456789'.replace(/\d{5,8}/g,'O');//"O9"
非贪婪模式'123456789'.replace(/\d{5,8}?/g,'O');//"06789"

前瞻

表达式 含义
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp

good(?=bad) ![]()
good(?!bad) ![]()

正则表达式实例方法

exec()

参数:接收一个参数,即要应用模式的 字符串
返回:第一个匹配项信息的数组,或者在没有匹配项的情况下返回null。

返回的数组包含两个额外的信息:index和input。index匹配项在字符串中的位置,input表示应用正则表达式的字符串。在数组中,第一项是与整个模式匹配的字符串,其他项是与模式中的捕获组匹配的字符串(如果模式中没有捕获组,则该数组只包含一项)

var text = 'mom and dad and baby';
var pattern = /mom( and dad)( and baby?)?/g

var matches = pattern.exec(text);

matches// ["mom and dad and baby", " and dad", " and baby"]
matches.index// 0
matches.input// 'mom and dad and baby'

// 忽略分组
var matches = /mom(?: and dad)(?: and baby?)?/g.exec(text)
matches// ["mom and dad and baby"]

var matches = /mom( and dad)(?: and baby?)?/g.exec(text)
matches// ["mom and dad and baby", " and dad"]

var matches = /mom(?: and dad)( and baby?)?/g.exec(text)
matches// ["mom and dad and baby", " and baby"]

Note:对于exec()方法即使在模式中设置了全局标志(g),它每次也只返回一个匹配项。但是在同一个字符串上多次调用exec()则会在字符串中查找新匹配项。而在不设置全局标志的情况下,在同一个字符串上多次调用exe(),始终返回第一个匹配项信息。

/*非全局调用*/
var reg1 = /\d/;
/*全局调用*/
var reg2 = /\d/g;

reg1.exec('a1b2c3');//["1"]
reg1.exec('a1b2c3');//["1"]
reg2.exec('a1b2c3');//["1"]
reg2.exec('a1b2c3');//["2"]
reg2.exec('a1b2c3');//["3"]
reg2.exec('a1b2c3');//null

while(r=reg.exec('a1b3c3')){
console.log(r.index+':'+r[0])
}//1:1 3:2x 5:3

test()

参数:接收一个字符串参数

返回:布尔值
在想知道目标字符串与某个模式是否匹配,但不需要知道其文本内容的情况下,使用这个方法非常方便。

var text = '000-00-0000';
var pattern = /\d{3}-\d{2}-\d{4}/;

if(pattern.test(text)){
    console.log('The pattern was matched')
} // The pattern was matched
//分组()->$1分组内匹配
'a1b2c3'.replace(/a(\d)b(\d)c(\d)/g,'a$1-b$2-c$3');//"a1-b2-c3"
'a%1b%2c%3'.replace(/%(\d)%/,'#$1#');//"a#1#b%2%c%3%"

//忽略分组
'a1b2c3'.replace(/a(?:\d)b(?:\d)c(?:\d)/g,'a$1-b$2-c$3');//"a$1-b$2-c$3"

//前瞻
'goodByron'.replace(/good(?=Byron)/g,'T');//"TByron"
'goodByron'.replace(/good(?!Byron)/g,'T');//"goodByron"'

lastIndex:告诉已经搜到哪了,下一次从那开始

var reg = /\d+/g;

reg.test('a1b2c3');//true
reg.lastIndex//2
reg.test('a1b2c3');//true
reg.lastIndex;//4
reg.test('a1b2c3');//true
reg.lastIndex//6
reg.test('a1b2c3');//false
reg.lastIndex;//0

参考网站:Regexper


  1. \r\n
  2. 0-9
  3. \t\n\x0B\f\r
  4. a-zA-Z_0-9
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109140.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月12日 下午8:00
下一篇 2021年9月12日 下午8:00


相关推荐

  • loadrunner server压力测试 sql_LoadRunner压力测试实例.pdf[通俗易懂]

    loadrunner server压力测试 sql_LoadRunner压力测试实例.pdf[通俗易懂]论坛测试资源交流区专用LoadRunner压力测试实例摘要:本文通过实例讲解介绍了LoadRunner工具的使用,介于公司的实际情况,文中主要是对工具的基本使用做了详细描述,高级运用方面除性能计数器与参数设置外其它均未涉及,待以后补充。目的是使公司人员根据该手册便可以独立运用Loadrunner进行压力测试主题词:Loadrunner工具压力测试1LoadRunne…

    2022年7月18日
    20
  • wpf-AvalonDock基础-安装和更换主题

    wpf-AvalonDock基础-安装和更换主题最近对wpf的多窗口排列问题深感头疼,算尺寸、位置太麻烦了(也可能是我菜鸡的缘故),最后决定用AvalonDock,排列很漂亮。本篇主要是安装和更换主题,后续会更一篇项目中常用的技巧。再吐槽一下,AvalonDock的中文资料同质化太严重!!!很多需要自己测试了才能用好(我的环境是win10+vs2019)喜欢的话为我的辛苦点个赞吧!嘤嘤嘤安装Avalondock是一个支持mvvm的框架,可以快速开发出类似visualstudio的多窗口app。去https://archive.codepl

    2022年7月20日
    27
  • 后台管理系统 – 权限管理「建议收藏」

    后台管理系统 – 权限管理「建议收藏」不管是开发手机APP,网站还是小程序等项目,基本上都需要一个后台管理系统的支撑。而每个后台管理系统都有一个通用的功能就是用户权限管理。最近基于Antd+React.js做了一个后台管理系统。

    2025年10月31日
    3
  • 气质如兰 一代才女林徽因

    气质如兰 一代才女林徽因在民国时期的著名才女中 林徽因的才艺似乎比萧红和张爱玲等显得更全面一些 人生际遇也更幸运 她不仅最早加入了 新月社 在诗歌 小说 散文 戏剧 绘画 翻译等方面成就斐然 还致力于建筑专业 成为我国第一位女性建筑学家 被胡适誉为 中国一代才女 她几乎标志丁一个时代的颜色 出众的才 倾城的貌 情感生活也像一个春天的童话 幸福而浪漫 nbsp nbsp nbsp 气质如兰的多才少女 nbsp nbsp nbsp nbsp 林徽因 1904 年 6 月 1

    2026年3月18日
    3
  • 简单理解常量、常量池、运行时常量池和字符串常量池

    简单理解常量、常量池、运行时常量池和字符串常量池1、常量常量在java中就值的是一般的字面量,比如字符串,整数,浮点数等等数据。简单理解java中什么叫常量2、常量池,也叫静态常量池,说常量池一定要指明是编译器生产

    2022年7月28日
    10
  • CTF——流量分析题型整理总结

    CTF——流量分析题型整理总结我见过的流量分析类型的题目总结:一,ping报文信息(icmp协议)二,上传/下载文件(蓝牙obex,http,难:文件的分段上传/下载)三,sql注入攻击四,访问特定的加密解密网站(md5,base64)五,后台扫描+弱密码爆破+菜刀六,usb流量分析七,WiFi无线密码破解八,根据一组流量包了解黑客的具体行为例题:一,ping报文信息(icm…

    2022年5月1日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号