资讯专栏INFORMATION COLUMN

正则表达式难记点总结

刘永祥 / 2235人阅读

摘要:正则表达式匹配但是不是使用正则表达式的方法提供了不少使用正则表达式的方法。当正则表达式包含子表达式且不包含全局标志时,二者返回相同的数组。示例当正则表达式带有全局标志时,二者表现不一致。

一路以来遇到正则表达式的地方都是直接去百度的,因为感觉大部分遇到的正则表达式的地方都是很常见的。这次顺便总结下正则表达式比较难记的部分,方便自己日后查阅吧( ̄. ̄)

正则表达式中的特殊字符

感觉MDN里面的资料还是挺不错的,特此记录下里面提到过的个人感觉比较难记的部分。

?:匹配前面一个表达式0次或者1次。等价于 {0,1}。此外,?还有一个比较重要的用途,即

如果?紧跟在任何量词 *、 +、? 或 {} 的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反。例如,对 "123abc" 应用 /d+/ 将会返回 "123",如果使用 /d+?/,那么就只会匹配到 "1"。
还可以运用于向前断言,如 x(?=y) 和 x(?!y) 。

(x):捕获括号。匹配 "x" 并且记住匹配项。在匹配中可以使用1、2、n表示括号中的内容,而在替换中,则使用$1、$2、$n。

(:x): 非捕获括号。匹配 "x" 但是不记住匹配项。

x(?=y):匹配"x"仅仅当"x"后面跟着"y".这种叫做正向肯定查找。例如,/Jack(?=Sprat)/会匹配到"Jack"仅仅当它后面跟着"Sprat"。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着"Sprat"或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

x(!=y):匹配"x"仅仅当"x"后面不跟着"y",这个叫做正向否定查找。例如,/d+(?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/d+(?!.)/.exec("3.141")匹配‘141’但是不是‘3.141’

使用正则表达式的js方法

js提供了不少使用正则表达式的方法。如RegExp的exec,和String的match、replace、search和split方法。

当你想要知道在一个字符串中的一个匹配是否被找到,你可以使用test或search方法;想得到更多的信息(但是比较慢)则可以使用exec或match方法。如果你使用exec或match方法并且匹配成功了,那么这些方法将返回一个数组并且更新相关的正则表达式对象的属性和预定义的正则表达式对象(详见下)。如果匹配失败,那么exec方法返回null(也就是false)。

match与exec区别

从前往往傻傻分不清match和exec的区别,因为两者的作用都是匹配字符串,返回数组,但是在不同情况下两者所返回的内容是不同的。

当正则表达式包含子表达式且不包含全局标志g时,二者返回相同的数组。

// 示例:

var str = "cat10,bat20,kat30";
var patten = /w(at)d+/;
var arr = str.match(patten);
arr[0] <=> ["cat10"]
arr[1] <=> ["at"]

var arr = patten.exec(str);
arr[0] <=> ["cat10"]
arr[1] <=> ["at"]

当正则表达式带有全局标志g时,二者表现不一致。
match会返回所有符合条件的匹配项,并以数组形式返回。数组第一项存放第一个匹配项,数组第二项存放第二个匹配项...依次类推。

exec则永远返回第一个匹配项。但是当连续调用exec时,则每次的返回值都是下一个匹配项。

// 示例1:

var str = "cat,bat,kat";
var patten = /at/g;
str.match(patten);  //["at", "at", "at"]
patten.exec(str);  //["at"]


// 示例2:

var str = "cat,bat,kat";
var patten = /w+/g;
str.match(patten);  //["cat", "bat", "kat"]

//第一次调用
patten.exec(str);  //["cat"]
//第二次调用
patten.exec(str);  //["bat"]
//第三次调用
patten.exec(str);  //["kat"]

当正则表达式包含子表达式时且包含全局标志g时,二者表现不一致。
match会返回所有符合条件的匹配项,并以数组形式返回。这时,match不会再返回子表达式的匹配项了。数组第一项存放第一个匹配项,数组第二项存放第二个匹配项...依次类推。

exec会返回子表达式的匹配项。换句话说就是,数组第一项存放整个匹配项,数组第二项存放第一个子表达式匹配项,数组第三项存放第二个子表达式匹配项...依次类推。

// 示例:

var str = "cat10,bat20,kat30";
var patten = /w(at)d+/g;
var arr = str.match(patten);  //["cat10", "bat20", "kat30"]
var arr = patten.exec(str);
arr[0] <=> ["cat10"]
arr[1] <=> ["at"]

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

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

相关文章

  • PHP小知识点

    摘要:那些琐碎的知识点作者记录的的很奇特很难记的知识点。易错知识点整理注意和的区别中和都是输出的作用,但是两者之间还是有细微的差别。今天手头不忙,总结一下,分享过程中掌握的知识点。 深入理解 PHP 之:Nginx 与 FPM 的工作机制 这篇文章从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与 PHP 是如何协同工作的。 PHP 那些琐碎的知识...

    hover_lew 评论0 收藏0
  • 还不会正则达式?看这篇!

    摘要:匹配次匹配次匹配次匹配次匹配次,等价于匹配次,等价于元字符在正则表达式中有一些具有特殊含义的字母,被称为元字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容转换及各种操作信息进行描述。 showImg(https://segmentfault.com/img/remote/1460000018489886?w=2000&h=1125); 正则表达式是很多程序员,甚至是一些...

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

    摘要:是否有标志对返回值有很大影响。参数限制返回值中分割元素数量方法返回一个由替换值替换一些或所有匹配的模式后的新字符串。 文章同步到github 正则在平时工作中用的非常多, 最开始接触正则的时候感觉这个东东好难记啊,最近把正则的内容整理了一下,写成以下文章。 先给大家介绍一个在线解析正则的网站,来帮助我们理解正则,特别是复杂的正则表达式,非常好用 http://www.regexper....

    isLishude 评论0 收藏0
  • python爬虫神器PyQuery的使用方法

    摘要:语法与几乎完全相同,所以不用再去费心去记一些奇怪的方法了。目前版本官方文档简介可让你用的语法来对进行操作。如果利用,对和的处理将更快。因此执行上述操作之后,本身也发生了变化。操作同样的原汁原味的语法运行结果这不需要多解释了吧。 前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却...

    codecraft 评论0 收藏0
  • 正则达式

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

    bang590 评论0 收藏0

发表评论

0条评论

刘永祥

|高级讲师

TA的文章

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