[js]正则表达式学习

正则表达式中i,m,g的解释

参数 g
g 只影响于 exec、match 方法。
若不指定 g,则:每次调用 exec 都只返回第一个匹配;match 也是只返回第一个匹配。
若指定 g,则:每次调用 exec 都从上一个匹配之后查找新的匹配;match 则是返回所有的匹配。
还有一种情况,就是使用 string 对象的 replace 方法时,指定 g 表示替换所有。


参数 i
参数 i 是指忽略大小写,注意仅是忽略大小写,并不忽略全半角。
参数 m
m 影响对行首、行尾的解释,也就是影响 ^、$。
若不指定 m,则:^ 只在字符串的最开头,$ 只在字符串的最结尾。
若指定 m,则:^ 在字符串每一行的开头,$ 在字符串第一行的结尾。

match和exec不仅匹配整体还,匹配整体其中的分组

//MDN中的例子
var re = /quick\s(brown).+?(jumps)/ig; 
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
// ["Quick Brown Fox Jumps", "Brown", "Jumps"]

对于exec匹配每次是从lastIndex开始

Note: Do not place the regular expression literal (or RegExp constructor) within the while condition or it will create an infinite loop if there is a match due to the lastIndex property being reset upon each iteration. Also be sure that the global flag is set or a loop will occur here also.

其实如果有g flag就不会发生无线循环的问题。

//MDN上的例子
var myRe = /ab*/g;
var str = 'abbcdefabh'; 
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
   var msg = 'Found ' + myArray[0] + '. ';
   msg += 'Next match starts at ' + myRe.lastIndex;  
   console.log(msg); 
}

小技巧积累

  1. 匹配任意字符(包括换行符):.[\d\D]*[\w\W]*[\s\S]都可以

问题

还是很多不熟练其实
exec,match,replace,
而且记录的点都很零散,没有系统

参考文献

  1. 正则表达式中参数g、i、m的作用(share)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 正则表达式练习题点击这里 创建一个正则表达式 使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示: ...
    打铁大师阅读 1,290评论 0 6
  • 什么是正则表达式 Regular Expression使用单个字符串来描述,匹配一系列符合某个句法规则的字符串 说...
    打铁大师阅读 794评论 1 6
  • 最近在学PHP,js时需要用到正则表达式,尽管在学Python时学了一些但是不够系统。每次看到繁琐的正则,就浅尝辄...
    zjbao123阅读 477评论 0 2
  • 一.正则表达式匹配原则 占有字符和零宽度 在正则表达式匹配过程中,如果子表达式匹配到的是字符内容,并被保存在结果之...
    Coree阅读 564评论 0 0
  • 一 妈妈,你好狠心,本当举国欢庆,合家团圆时,你硬是不肯多陪我几天,度过这个难得的春节。妈妈,你很有心,你什么都明...
    别山举水阅读 2,021评论 62 89