资讯专栏INFORMATION COLUMN

javascript--正则表达式

王晗 / 2826人阅读

摘要:正则表达式中的元字符这些元字符在正则表达式都有一种或者多种用途。下面将描述元字符在模式中的各种应用。使用元字符构建类。匹配项在字符串中的位置,表示应用正则表达式的字符串。

正则表达式

var expression = / pattern / flags;

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

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

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

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

正则表达式中的元字符

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

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

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

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

使用元字符[ ]构建类。

1.[ ]:构建简单类

[abc]

2.^:与[ ]并用构建反向类

[^abc]

3.范围类
[a-zA-Z]

边界

多带带使用^代表以xxx开头

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

^ab

ab$

a

a

元字符|代表或

a|c

预定义类
字符 等价类
. 1 除了回车符和换行符之外的所有字符
d [0-9] 数字字符
D 2 非数字字符
s [ x0Bf ] 空白符
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

0-9 ↩

x0Bf ↩

a-zA-Z_0-9 ↩

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78750.html

相关文章

  • 正则达式

    摘要:本文内容共正则表达式火拼系列正则表达式回溯法原理学习正则表达式,是需要懂点儿匹配原理的。正则表达式迷你书问世了让帮你生成和解析参数字符串最全正则表达式总结验证号手机号中文邮编身份证地址等是正则表达式的缩写,作用是对字符串执行模式匹配。 JS 的正则表达式 正则表达式 一种几乎可以在所有的程序设计语言里和所有的计算机平台上使用的文字处理工具。它可以用来查找特定的信息(搜索),也可以用来查...

    bang590 评论0 收藏0
  • JavaScript正则达式的匹配模式

    摘要:选择分组和引用正则表达式的语法还包括指定选择项子表达式分组和引用前一子表达式的特殊字符。带圆括号的表达式的另一个用途是允许在同一正则表达式的后部引用前面的子表达式。 正则表达式(regular expression)是一个描述字符模式的对象。JavaScript的 RegExp类 表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进 行强大的模式匹配和文本检索与...

    wqj97 评论0 收藏0
  • JS正则达式入门,看这篇就够了

    摘要:如果遇到非常的复杂的匹配,正则表达式的优势就更加明显了。关于正则表达式书写规则,可查看,上面说的很清楚了,我就不贴出来了。替换与正则表达式匹配的子串,并返回替换后的字符串。结语正则表达式并不难,懂了其中的套路之后,一切都变得简单了。 前言 在正文开始前,先说说正则表达式是什么,为什么要用正则表达式?正则表达式在我个人看来就是一个浏览器可以识别的规则,有了这个规则,浏览器就可以帮我们判断...

    wenzi 评论0 收藏0
  • JavaScript 中的正则达式

    摘要:正则表达式的意义中的正则表达式使用表示,可以使用构造函数来创建对象,不过对象更多的是通过一种特殊的直接量语法来创建。用构造函数也可以定义一个与之等价的正则表达式,代码如下正则表达式的模式规则是由一个字符序列组成的。 正则表达式的模式匹配 正则表达式(regular expression)是一个描述字符模式的对象。javascript的RegExp对象表示正则表达式,String和Reg...

    _Dreams 评论0 收藏0
  • JavaScript中的正则达式

    Javascript的正则表达式是前端中比较重要的部分,正则表达式主要用于字符串处理,表单验证等场合,实用高效,文章主要对JavaScript中的正则的学习与总结 正则表达式的定义 正则表达式:是一个描述字符模式的对象,JavaScrip中正则表达式用RegExp对象表示,可以使用RegExp构造函数来创建正则对象 正则表达式的创建 1.字面量创建 var reg = /[a-z]/; 2.构...

    _Zhao 评论0 收藏0
  • 简单说 正则达式——要注意lastIndex属性

    摘要:返回是一个只读的布尔值,看这个正则表达式是否带有修饰符。方法,它的参数是一个字符串,用对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回,否则返回。总结这次主要是说说,中正则表达式对象的个属性,而最需要注意的就是属性了。 说明 这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。 解释 每个RegExp对象都包含5个属性,source、global、ign...

    jokester 评论0 收藏0

发表评论

0条评论

王晗

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<