请分别解释下文字和图片中的意思-正则表达式

请分别解释下文字和图片中的意思-正则表达式

调用 RegExp 对象 r 的 test() 方法,并为它传递字符串 s,与这个表示式是等价的:(r.exec(s) != null)。

http://img1.sycdn.imooc.com//climg/5e0ecc7c093c946b07720249.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

不用手动置零,那个是自己执行的,被置零应该是pattern.lastIndex,这个例子里你只要记住第四次返回的是null同时将pattern.lastIndex自动置零,第五次执行相当于从头开始匹配,也就是和第一次一样。

这是我当时做的笔记,index和pattern.lastIndex是两个东西,你看着理解一下

http://img1.sycdn.imooc.com//climg/5e0edde6099172ec03790243.jpg

  • index是被找到的字符串的首字符在str中的位置,而这个是上次找到的字符串的尾字符的下一个位置,
    2020-01-03 14:26:31
  • 迷失的小麦 提问者 #2
    我的意思是: 如果在一个字符串中完成了一次模式匹配之后要开始检索新的字符串, 就必须手动地把 lastIndex 属性重置为 0 你所说的应该是搜索同一个字符串才自动置零吧
    2020-01-03 14:30:53
  • Kunagisa_ 回复 提问者 迷失的小麦 #3
    那你都完成了这次模式匹配了,再去找新的字符串不是又开了一个正则吗,那和之前那个就没关系了吧
    2020-01-03 14:36:16
提问者 迷失的小麦 2020-01-03 14:39:55

http://img1.sycdn.imooc.com//climg/5e0ee1ab0931ffc809610742.jpg

这个是我总结的

Kunagisa_ 2020-01-03 13:44:56


var str = "js js js";
var pattern1 = /js/;
console.log(pattern1.exec(str));
//控制台中的数组有一个index属性,表示匹配到的字符的位置,非全局匹配的情况下不管调用几次
//exec方法,其index都为0,即匹配到的都是第一个js

var pattern2 = /js/g;
//全局匹配的情况下,index会随着exec的调用次数而发生改变,具体是和pattern.lastIndex有关,
//在此例中第一次调用exec,其index为0;第二次为3,即第二个js开头的位置,以此类推,直到
//匹配到最后一个js,后面没有js之后则会返回null,并把pattern.lastIndex置零;
//在此例中为第四次调用返回null,第五次调用与第一次调用相同,以此类推


  • 提问者 迷失的小麦 #1
    当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。请问是什么意思,也就是你这里举得例子的文字说明,不知道置零有什么意义
    2020-01-03 14:02:36
  • Kunagisa_ 回复 提问者 迷失的小麦 #2
    置零就代表找完了字符串中所有的匹配项,在这之前每次调用exec方法返回的数组中的index值不同,即匹配到的js是字符串中不同的js,第一次调用匹配到的是第一个,第二次是第二个,第三次是第三个,由于字符串中只有三个js,所以第四次匹配不到了,返回的就是null了,这时候就会置零。我的建议是你可以自己在控制台中查看一下打印的信息,先记住这个知识点,具体有什么意义或者怎么使用还是需要到实际问题中来看的
    2020-01-03 14:12:00
  • 提问者 迷失的小麦 回复 Kunagisa_ #3
    是不是可以理解为置零之前,匹配文本的位置发生了变化,与匹配之前的位置不一样了。而用了exec()方法之后再次调用需要手动置零,对吗?
    2020-01-03 14:18:05
Kunagisa_ 2020-01-03 13:37:01

test会在匹配到的时候返回true,没匹配到则返回false。exec会在匹配到的时候返回一个包含匹配字符的数组,如果没匹配到则返回null。(r.exec(s) != null)是检测正则r对字符串的exec方法是否返回一个数组,如果返回一个数组,该判断为true,否则返回false,本质上就和r.test(s)相同。

  • 提问者 迷失的小麦 #1
    请问这里的r.exec(s) != null为什么不用==
    2020-01-03 13:57:34
  • Kunagisa_ 回复 提问者 迷失的小麦 #2
    ==的话就成了是null的时候返回true,但是test方法中是null的返回的是false,这样的话就反过来了
    2020-01-03 14:04:03
  • 提问者 迷失的小麦 #3
    我的意思是写成r.exec(s) !== null
    2020-01-03 14:41:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师