2021-07-23

正则表达式的补充学习

正则的一些补充学习

matchmatchAllexec的区别

  • match,matchAll作用在字符串上,exec作用在正则表达式上

  • match匹配g模式的正则时返回的是匹配到的所有字符组成的数组;

    匹配非g模式的正则时返回的数组的第一个是匹配到的,其余的是括号里捕获到的字符串。

  • exec匹配g模式的正则时返回的数组和match匹配的非g模式正则返回值相同;

    在g模式下,exec会记录匹配,会将上次成功匹配后的位置记录在正则表达式的lastIndex 属性中,下一次匹配会从那开始。

  • matchAll只能匹配g模式,且返回一个迭代器,可以通过for...of Array.from 扩展运算符来操作,它的返回值收集成数组和exec是一样的返回,都是match匹配到非g模式时的返回值。

let str = "abcde abcde abcd";const Aregexp = /(abc)d(e)/g;const Bregexp = /(abc)d(e)/;console.log(str.match(Aregexp)); //? [abcde abcde]console.log(str.match(Bregexp)); //? [abcde abc e]console.log(Aregexp.exec(str)); //? [abcde abc e]console.log(Aregexp.exec(str)); //? [abcde abc e]console.log(Aregexp.exec(str)); //? nullconsole.log(Bregexp.exec(str)); //? [abcde abc e]console.log(Bregexp.exec(str)); //? [abcde abc e]console.log(...str.matchAll(Aregexp)); //? [abcde abc e] [abcde abc e]console.log(...str.matchAll(Bregexp)); //! error 只能匹配g模式

(?:x) 非捕获括号

这与正则的匹配无关,遇到的时候可以直接忽略该符号,直接用里面的字符与后面的拼接。

let str = "abcdbd";const Aregexp = /(?:abc)d/;const Bregexp = /abcd/;console.log(str.replace(Aregexp, "")); //? bdconsole.log(str.replace(Bregexp, "")); //? bd

两个结果是一样的。

但是匹配的结果是不同的,被(?:)括起来的不会被exec、match单独匹配出来:

let str = "abcdb";const Aregexp = /(?:abc)(d)b/;const Bregexp = /(abc)(d)b/;console.log(Aregexp.exec(str)); //? abcdb bconsole.log(Bregexp.exec(str)); //? abcdb abc d

这个符号是括号的一种特殊形式,一般的括号括起来组成的组会被以$n的形式记录,方便使用,但是用这个符号括起来的组不会被记录:

let str = "abcdbd";const Aregexp = /(?:abc)(d)b\1/; //! `\x`会被认为是第x个括号里的内容 这里相当于\abcdbabc\const Bregexp = /(abc)(d)b\1/; //! 这里相当于\abcdbabc\console.log(str.replace(Aregexp, "")); //? 空 都替换掉了 因为`(?:)`不会被记录console.log(str.replace(Bregexp, "")); //? abcdbdlet strs = "abcdbabc";console.log(strs.replace(Bregexp, "")); //? 空 都替换掉了//! 同理 replace 中的 $x也不会记录console.log(str.replace(Aregexp, "$2 $1")); //? $2 dconsole.log(strs.replace(Bregexp, "$2 $1")); //? d abc

(?<name>)具名组匹配符

这个符号和上面的(?:)一样是括号的特殊修饰符,它会在匹配结果中生成一个groups属性,用对象的键值对来记录括号里匹配的结果:

let str = "abcdb"......

原文转载:http://www.shaoqun.com/a/893243.html

跨境电商:https://www.ikjzd.com/

关键词分析工具:https://www.ikjzd.com/w/1968

acca是什么:https://www.ikjzd.com/w/1370

刘军:https://www.ikjzd.com/w/1835


正则的一些补充学习match,matchAll和exec的区别match,matchAll作用在字符串上,exec作用在正则表达式上match匹配g模式的正则时返回的是匹配到的所有字符组成的数组;匹配非g模式的正则时返回的数组的第一个是匹配到的,其余的是括号里捕获到的字符串。exec匹配g模式的正则时返回的数组和match匹配的非g模式正则返回值相同;在g模式下,exec会记录匹配,会将上次成功匹
adore:https://www.ikjzd.com/w/2202
网易考拉海购大促:https://www.ikjzd.com/w/1052
万国建筑博览群,充斥各种"之最",烂泥塘飞出个金凤凰_上海:http://www.30bags.com/a/220112.html
万豪国际成功举办旅享美食3.0活动,郑州尽展魅力风采:http://www.30bags.com/a/425920.html
万豪国际集团旗下八个奢华酒店品牌 重新定义高端酒店行业格局:http://www.30bags.com/a/434472.html
万豪国际集团荣获中国饭店协会三项荣誉:http://www.30bags.com/a/426715.html
那一夜他把我做到喷水 火车上爱爱好爽好刺激:http://www.30bags.com/m/a/249943.html
老师晚上求我桶她 老师好大好深啊把腿开开:http://www.30bags.com/m/a/249805.html
最能触动她心弦的几件事,只要你做到了,她就会死心塌地的找你:http://lady.shaoqun.com/a/429434.html
对大学生男女比例逐年失衡的思考:http://lady.shaoqun.com/a/429435.html
男人知道怎么做,让女人爱死你:http://lady.shaoqun.com/a/429436.html
甜蜜520,两个甜蜜又忠贞的古代爱情故事,让人向往:http://lady.shaoqun.com/a/429437.html

No comments:

Post a Comment