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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java.nio.heapbytebuffer_javastringbuffer和string区别

    java.nio.heapbytebuffer_javastringbuffer和string区别文章目录简介初始化向ByteBuffer写数据手动写入数据从SocketChannel中读入数据至ByteBuffer从ByteBuffer中读数据复位position读取数据字节序处理简介在Java的Socket编程中,若使用阻塞式(BIO),则往往通过ServerSocket的accept()方法获取到客户端Socket之后,再使用客户端Socket的InputStream和OutputS…

    2022年10月3日
    3
  • 多项式曲线拟合之最小二乘法推导[通俗易懂]

    多项式曲线拟合之最小二乘法推导[通俗易懂]1、多项式曲线拟合之最小二乘法1.1问题来源1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星。经过40天的跟踪观测后,由于谷神星运行至太阳背后,使得皮亚齐失去了谷神星的位置。随后全世界的科学家利用皮亚齐的已有观测数据开始寻找谷神星,但是根据大多数人计算的结果来寻找谷神星都没有结果。只有时年24岁的高斯所计算的谷神星的轨道,被奥地利天文学家海因里希·奥尔伯斯的观测所证实,使天文界从此可以预测到谷神星的精确位置。同样的方法也产生了哈雷彗星等很多天文学成果。高斯使用的方法就是最小二乘法,

    2022年5月17日
    57
  • PHP调用Webservice实例[通俗易懂]

    PHP调用Webservice实例[通俗易懂]NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类,由NuSphereCorporation(http://dietrich.ganx4.com/nusoap/)开发。NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,

    2022年7月21日
    17
  • python进制转换函数-Python中进制转换函数的使用

    python进制转换函数-Python中进制转换函数的使用Python中进制转换函数的使用关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制)、bin()(十进制转换到二进制)、oct()(十进制转换到八进制)、hex()(十进制转换到十六进制)。下面我们逐个说下每个函数的用法。binbin()函数,是将十进制的数字转换成二进制的数字。其中bin()函数中传入的是十进…

    2022年5月19日
    37
  • Ubuntu彻底卸载jdk「建议收藏」

    Ubuntu彻底卸载jdk「建议收藏」参考链接原链接1、移除所有java相关的包(sun,Oracle,openJDK,lcedTeaplugins,GIJ)#apt-getupdate#apt-cachesearchjava|awk'{print($1)}’|grep-E-e’^(ia32-)?(sun|oracle)-java’-e’^openjdk-‘-e’^icedtea’-e’^(default|gcj)-j(re|dk)’-e’^gcj-(.*)-j(re|dk)’-e’

    2022年6月25日
    37
  • java 正则表达式 html,java正则表达式语法大全

    java 正则表达式 html,java正则表达式语法大全谁知道java正则表达式语法?正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如HelloWorld正则表达式匹配”Helljava如何判断一个字符串符合正则表达式语法JAVA正则表达式获取大括号内容例:jdbc=jdbc:jtds:sql…

    2022年7月19日
    14

发表回复

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

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