JS中与正则相关的方法

前面有一篇文章大体介绍了一下JS中正则表达式,而使用正则表达式还需要配合JS中的相关方法,分别是String对象和RegExp对象的方法。今天就来具体介绍一下这些方法。

使用这则表达式的方法可以分为两类,一个是String的几个方法,还有一个就是RegExp对象自身的方法,分别有:

RegExp的方法有 exec test

String的方法有 match replace search split

这些方法中最复杂的就是exec这个方法,表面上和String的match方法很像但是不然。

正则的exec()与字符串的match()

当这个方发作用于非全局匹配的正则表达式的时候和String的match方法作用是一样的,会返回一个数组数组的第一个元素是正则表达式的匹配结果,第二个元素是正则表达式第一个子表达式(分组,用小括号括起来的表达式)的匹配结果,以此类推。结果数组还有index属性,input属性和groups属性,其中index表示的是匹配到的字符串第一个字符的index,input是执行匹配的字符串。以上这些属性和String.match方法返回的都一样。当匹配不到结果的时候两个方法返回的都是null。

var a = /a(\w)/;
var str = "cbacbab";str.match(a); // ["ac", "c", index: 2, input: "cbacbab", groups: undefined]a.exec(str); // ["ac", "c", index: 2, input: "cbacbab", groups: undefined]

当匹配全局正则表达式的时候这两个方法的表现则完全不同,match方法会一次返回所有的匹配结果并且不会有其它额外的信息,而exec则不同一次只会返回一个匹配的结果,但是结果中还会包含以上的信息。

exec在执行全局匹配的时候回从lastIndex开始匹配,匹配后会设置Regexp对象的lastIndex属性为匹配到的字符最后一个字符的下一个位置,当匹配不到结果的时候就会重置lastIdex属性值为0。

所以match在匹配全局正则表达式和非全局正则表达式的行为表现是不一样的(JS中这样的例子有很多,例如Array() 参数个数不一样导致的结果也不一样)。

var a = /a(\w)/g;
var str = "cbacbab";str.match(a); // ["ac", "ab"]a.exec(str); // ["ac", "c", index: 2, input: "cbacbab", groups: undefined],看第二个元素 'c' 这就是(\w)子表达式捕获的字符串a.lastIndex; // 4a.exec(str); // ["ab", "b", index: 5, input: "cbacbab", groups: undefined]a.lastIndex; // 7 匹配结果后面没有了所以重置为0a.exec(str); // nulla.lastIndex; // 0

test()方法

reg.exec(b)返回一个boolean值表示在b中能否匹配到reg(正则表达式),与正则的exec方法一样当正则为全局匹配的时候会根据属性lastIndex来匹配,返回信息。

var reg = /a/;var a = 'edcba';var c = 'ddd';reg.test(a); // truereg.test(c); // false// 全局匹配的正则var regG = /a/g;var str = 'abcdabcd';regG.test(str); // trueregG.lastIndex; // 1regG.test(str); // true 这是从字符串位置1开始匹配的结果,并不是从新从字符串位置0开始匹配regG.lastIndex; // 5retG.test(str); // falseregG.lastIndex; // 0 没有匹配的结果就重置了lastIndex为0

replace()方法

这个方法可以捕获分组,但是JS中的正则表达式并不能给分组命名,所以只能用分组的序号来捕获分组。

var a = 'abcdefg';var reg = /c(de)/;a.replace(reg, '$1hhh'); // 这个$1就是捕获了分组 (de) 所以结果是 abdehhhfg

search()方法

在字符串a中搜寻字符串b,字符串b也可以是一个描述字符串的正则表达式。返回的是字符串b在a中的起始位置,如果搜索不到那么就会返回-1,和在数组中使用indexOf查找元素一样找不到会返回-1。

var a = 'abcd';var reg = /b/;a.search(reg); // 1a.search('e'); // -1

split()方法

a.split(b) 根据b分割a,返回一个数组。b可以是一个字符串也可以是一个描述字符串的正则表达式。

var a = 'ab cd ef';a.split(' '); // ["ab", "cd", "ef"]a.split(/\s+/); // ["ab", "cd", "ef"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS基础:求一组数中的最大最小值,以及所在位置

1 var arr [0, 5, -3, 6, 2, -6, 10];2 //定义一个最大值和一个最小值,把他们的索引值赋值给固定的两个变量3 var maxValue arr[0];4 var minValue arr[0];5 var maxIndex 0;6 var minIndex 0;7 for …

linux epoll,poll,select

epoll函数用法,还有点poll和select 1,LT的epoll是select和poll函数的改进版。 特点是,读完缓冲区后,如果缓冲区还有内容的话,epoll_wait函数还会返回,直到把缓冲区全部读完。 2,ET的epoll&#…

λ和副作用

总览 Java 8添加了诸如lambda和类型推断之类的功能。 这使语言不那么冗长和简洁,但是它带来了更多的副作用,因为您不必对所做的事情那么明确。 Lambda的返回类型很重要 Java 8推断闭包的类型。 一种方法是查看返回类型(或是否返回任何内容&a…

sessionStorage和localStorage的用法,不同点和相同点

一,共同点 (1)存储时用setItem: localStorage.setItem("key","value");//以“key”为名称存储一个值“value”sessionStorage.setItem("key", "value"); (2)获取时用getItem: localS…

shell学习笔记1-文件安全与权限

1,创建文件的用户和他所属的组拥有该文件,文件的属主可以设定谁具有读、写、执行该文件的权限,根用户可以改变任何普通用户的设置。 2,一个文件一经创建,就具有三种访问权限:读(可以显示该文件的…

没有IF-ELSE的工厂

面向对象语言具有非常强大的多态性功能,用于删除代码中的if / else或切换大小写。 没有条件的代码易于阅读。 在某些地方必须放置它们,其中一个示例是Factory / ServiceProvider类。 我敢肯定,您已经看到IF-ELSEIF的工厂课程了,…

最新70佳单页网站设计案例欣赏(上篇)

单页网站是指只有一个页面的网站,这种形式的网站曾经非常流行,现在依然有很多人喜欢。不过,并不是每个网站都适合做成单页,一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

浏览器劫持者

launchpage 浏览器劫持者,它会在未经你的许可下就接管你的浏览器。更多 https://launchpage.org/?uidqT5KGGjMhxpsXWEzIkWR44y5McmHTuSG50ukahoC8gOClKIGNwZP0nuyPBoYUFiBINK7 https://ns.freedrive.cn/?sEB5805AD0&ghttp://item.jd.com/13300636764.html 更…

Kubernetes 中文文档

Kubernetes 中文文档 如果想学习 Kubernetes 的小伙伴,可以参考如下文档学习: https://www.kubernetes.org.cn/docs 文档中详细讲解了 k8s 的设计理念,基本概念,常用命令等。 转载于:https://www.cnblogs.com/miracle-luna/p/1111…

Edge 浏览器

Edge浏览器设计理念 无法播放:https://edgewelcomecdn.microsoft.com/site/images/tabs/rs3/tabs_screen.acd367a2.mp4 控制台消息 WEBGL11256: 检测到 GPU 重置。正在临时切换到软件呈现 WEBGL11056: 遇到的错误太多,将不再记录更多错误 Intersecti…

为什么NULL是错误的?

Java中NULL用法的简单示例: public Employee getByName(String name) {int id database.find(name);if (id 0) {return null;}return new Employee(id); }这种方法有什么问题? 它可能返回NULL而不是对象-这是错误的。 在面向对象的范例中&#xff0c…

网易原来也是个骗子

当初开通photo.163.com网易相册时,就是看着网易的宣传口号:免费而且不限容量!结果现在坏了,规则说改就改,容量一下子收到1G,超过部份要么给钱¥¥¥¥&#xffe5…

不同设备屏幕尺寸和DPR适配

为什么需要适配 目前市面上设备屏幕属性十分多样化(宽度和DPR并不一致),而作为设计和前端开发,无法为每个尺寸的设备单独设计一套UI并将其转为前端代码,这不现实。所以我们需要一套方案来将一套设计稿完美呈现在不同尺…

Test 6.29 T3 小学生

问题描述 “不错,不错!那么,准备好迎接下一道题了么?”一道白光闪过,CJK 眼前出现了 1e100 个小学生。“他们中,有一些人轨了我的机子。现在,我需要你在 1S 之内找出他们,并让他们认错!”凭借自己无所不知的神(xuan)奇(xue)力量, CJK 立刻发现了轨了 JesseLiun的机子的那 n 个…

web安全之CSRF

CSRF是什么 CSRF(Cross Site Request Forgery)跨站请求伪造,是一种攻击方式。通过名字可以看出这个攻击通常是在其他网站发出的,并不是在目标网站。 该攻击会在用户不知情的情况下盗用用户的登录信息请求目标网站完成对目标网站…

AssertJ Fest Hamcrest

我以前曾在博客中介绍过Hamcrest ,并使用其assertThat方法优先于JUnit的Assert 。 但是,我很快发现了FEST断言 ,并愉快地切换到它。 它提供了与Hamcrest相同的改进的测试可读性,并改善了故障消息,但具有启用IDE自动完…

Edge浏览器开发人员工具

UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240" 本地存储/会话存储模拟达到上限 资源终于全部列表出来了 删除 Cookie 和 删除会话 Cookie 样式可以实时编辑了 …

作为入门开发者应该知道的事

前言 如果你是开始学习编程并且决心学好,或者你刚离开学校还没有工作,这篇文章刚好适合你 我将分享作为开发者在工作过程中积累的关键点和隐藏的真相 编程是件困难的事,不仅仅对你而言 没有人说过编程是简单的事情,如果是的话&…

linux 第一个内核模块Hello World

内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kern…

懒惰和贪婪-正则回溯

需要一定的正则基础,并且是基于JS写的文章。 正则表达式是从左往右匹配的。在使用正则表达式的时候我们知道/.*/可以匹配一个字字符串中所有的字符,/.*?/却一个字符都匹配不到。/(.*)\d/中的.\*可以匹配除了最后一位数字的所有字符,但是之前…