归纳篇(二)正则表达式

假如不经常写正则表达式的话,真是学一遍忘一遍。自己再复习一遍正则表达式。另外,归纳篇会持续更新文章,但更新的目录可能是跳跃式,因为主要是我自己查缺补漏,参考梳理,后面还会再开一篇常用正则表达式汇总,自己写一遍加深这些规则,以后项目中要是用到可以比较方便。

正则表达式的定义

  • 正则表达式是一个描述字符模式的对象。
  • ECMAScript中的RegExp类表示正则表达式。
  • 正则表达式用来验证客户端的输入数据。

创建正则表达式

  1. 和创建字符串类似,一种是new方式,一种是字面量方式
var pattern =new RegExp('pattern',‘gi’); //new方式,第一个参数是模式字符串,第二个可选参数是模式修饰符
var pattern2=/pattern2/ig; //字面量方式,模式修饰符i(忽略大小写),g(全局匹配),m(多行匹配)

正则表达式的属性和方法

  • 静态属性和实例属性(都没啥大用,了解过下)
    • 静态属性 :input、leftContext、rightContect、lastMatch、lastPattern、multiline
var pattern =/google/;
var str='This is a google!';
pattern.test(str);//必须执行一下,静态属性才有效
alert(RegExp.input)   //当前被匹配的字符串  
alert(RegExp.leftContext)   //当前被匹配的字符串的前子串
alert(RegExp.rightContext)   //当前被匹配的字符串的后子串
alert(RegExp.lastMatch) //google 最后一个被匹配的字符串
alert(RegExp.lastPattern)//  最后一对圆括号里匹配的字符串
alert(RegExp.multiline)// false  用于指定是否所有的表达式都用于多行的布尔值
  • 实例属性:global、ignoreCase、lastIndex、multiline、source
  • 2个测试方法test()和exec();1个编译方法compile()
    • test()在字符串中测试模式匹配,返回true和false;
    • exec() 在字符串中执行匹配搜索,返回结果数组,其中存放匹配的结果;如果没有匹配就返回null;
  • compile()编译和改变后重新编译正则表达式;
  • 使用字符串的正则表达式的4个方法:
  • match():返回pattern中 子串或null;获取匹配的数组
  • replace(pattern,replacement):返回替换后的字符串;
  • search():返回匹配字符串中开始位置,找不到则返回-1
  • split():返回字符串指定匹配字符串拆分的数组
var pattern =/google/g;
var str='this google googlea googlea'; 
console.log(str.match(pattern));  //返回数组["google", "google", "google"]
console.log(str.replace(pattern,'box'));  //开启全局,全部替换,返回this box boxa boxa
console.log(str.search(pattern));  //返回位置5
console.log(str.split(pattern));  //返回数组["this ", " ", "a ", "a"]

正则表达式的符号

  • 正则表达式由两种基本字符类型组成:原义文本字符和元字符
  • 元字符是在正则表达式中含有特殊含义的非字母字符

\t //水平制表符
\v //垂直制表符
\n //换行符
\r //回车符
\0 //空字符
\f //换页符
\cX //与X对应的控制字符(Ctrl+x)

  • 字符类:
var pattern=/[abc]/ //泛指字符abc这一类的字符
var pattern=/[^abc]/ //^创建反向类/负向类,不属于某类的内容。表示不是a或b或c的内
  • 范围类
'assklja1223'.replace(/[a-z]/g,'7'); // 得到"77777771223"。[a-z]表示26个小写字母a-z,也可以连写[a-zA-Z]
'as-sk-lja-122-3'.replace(/[a-z-]/g,'Q'); //得到"QQQQQQQQQQ122Q3"。要匹配连字符-就直接加在里面[a-z-]
  • js预定义类及边界

. //除了回车符和换行符之外的所有字符
\d //数字字符
\D //非数字字符
\s //空白符
\S //非空白符
\w //单词字符(字母数字下划线)
\W //非单词字符
^ //以什么开始,只有在[]里面^表示取反
$ //以什么结束
\b //单词边界
\B //非单词边界

  • 量词
    • 匹配连续出现多次
      ?//出现0次或1次
      + //至少出现1次
      * //出现任意次
      {n} //出现n次
      {n,m} //出现n到m
      {n,} //至少出现n次
  • js正则贪婪模式和非贪婪模式
    • 正则表达式默认会尽可能多的去匹配
      '12345678'.replace(/\d{3,6}/g,'S') //得出'S78'
    • 让正则表达式尽可能少的匹配,一旦匹配成功不再继续尝试匹配就是非贪婪模式。做法就是在量词后面加上?
      '123456789'.match(/\d{3,5}?/g) //得出["123", "456", "789"]
  • 分组
    • 使用()可以达到使量词作用于分组
      'a1b2c3d4'.replace(/([a-z]\d){2}/g,'Ac') //得到"AcAc"
    • 或 (使用 | 可以达到或的效果)
      'carrfcaggty'.replace(/ca(rr|gg)/g,'BB') //得到'BBfBBty'
    • 反向引用
      //2015-12-25=>12/25/2015
      //只有在分组里,$1$2$3捕获分组
      '2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1');
      //如果不希望某些分组被捕获,只要在分组内加上?:就可以
  • 前瞻
    • 正则表达式从文本头部像文本尾部开始解析,文本尾部方向,称为“前”。
    • 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言;后顾/后瞻方向相反
    • JavaScript不支持后顾
    • 符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配
    •  'a2*3'.replace(/\w(?=\d)/g,'x')  //得出"x2*3"。
        //正向前瞻exp(?=assert)
        //负向前瞻exp(?!=assert)
        //前面是一个正则,后面是一个断言规则
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容