js正则表达式进修笔记

说来惭愧,做前端快三年关于正则表达式的运用照样很浅陋,人人都晓得正则的速率基础上是最快的,但就是懒得去记那些语法和划定规矩,此次项目中屡次用到了须要婚配替代的行动,终究下定决心去研究一下了。

实例化正则对象

  • 对象字面量

/pattern/attributes

正则对象由这两部分构成pattern(婚配划定规矩)+attributes(修饰符)

var reg = /\bis\b/

如许就胜利的实例化一个正则表达式对象,接着我们去运用它

《js正则表达式进修笔记》

字符串的replace函数接收两个参数,第一个参数可所以字符串或许正则表达式,第二个参数是须要替代的字符串,如许我们就胜利把小写的’is‘替代成了大写的’IS‘
很多同砚看那一串标记又最先头晕了,别急,听我逐步道来

我们先来拆解这个正则表达式
起首开首末端的//是必需的,然后是两个’b‘,代表着单词的开首或末端,也就是单词的分界处,末了中心的is是须要婚配的字符串。连起来意义就是婚配字符串中的is,而且前后必需要有分界,也就是说’isisisisis‘这里的is不能替代成’ISISISISIS‘
好了,有同砚会问,为何句子中的第二个’is‘没有被替代,为何我们没看到所谓的谁人修饰符。我们再改写一下这个正则对象

《js正则表达式进修笔记》

发明多了一个修饰符g,代表全局(globle)搜刮,如许就能够婚配字符串中的一切的’is‘

  • 组织函数

var reg = new RegExp(pattern,attributes)

var reg = new RegExp('\\bis\\b','g') === var reg = /\bis\b/g

这里须要诠释下为何一样的婚配划定规矩却多了两个\
那是由于在js语法中,\须要转义,所以在这里的组织函数参数中须要把\转义

《js正则表达式进修笔记》

修饰符

  • g–globe

这个在之前的例子中人人已见地过了,就是全局搜刮,默许婚配到第一个就会住手

  • i–ignore case

疏忽大小写,默许大小写敏感

《js正则表达式进修笔记》

  • m–multiple lines

多行搜刮

种种划定规矩

  • 元字符

正则表达式有两种基础字符范例构成–原义文本字符和元字符
原义文本字符:字母数字这类无需转义的字符
元字符:在正则表达式中有特别寄义的非字母字符

 * + ? $ ^ . | \ () {} []
  • 字符类

我们能够用元字符[]来组织简朴的类
比如说:[abc]就把abc三个字母归为了一类,表达式能够婚配这一类字符

《js正则表达式进修笔记》

  • 字符类取反

运用元字符^示意不属于建立的类中的字符

《js正则表达式进修笔记》

  • 局限类

假如如果应用字符类婚配26个英文字母岂非要逐一写出来么,哈哈哈,too young too simple
运用局限类[a-z]婚配一切的26个英文字母,相加婚配前提就直接加在[]内里。
比如说[a-zA-Z0-9]婚配大小写的英文字母和0-9的数字

《js正则表达式进修笔记》

  • 预定义类

《js正则表达式进修笔记》

看一个例子:婚配ab+数字+恣意字符的字符串

在进修预定义类之前我们的写法是

ab[0-9][^/n/r]

如今我们进修了预定义类以后就能够如许

ab\d.
  • 边境

《js正则表达式进修笔记》

这里的单词边境在最早的例子中我们已见地过了,如今我们对照一下b和B的区分

《js正则表达式进修笔记》

^和$的用法

《js正则表达式进修笔记》

须要注重的是^和$在正则中的位置

  • 量词

假如我们须要婚配一连涌现100次数字的字符串岂非要写100个\b
巨大的js言语固然不会这么傻了,这不引入了量词的观点么

《js正则表达式进修笔记》

这一次的例子我们连系接下来的观点一同明白

贪欲形式与非贪欲形式

《js正则表达式进修笔记》

这个例子中我们把0-9这九个数字先是用{3,6}来全局婚配,发明婚配出两个NB
我来诠释一下,正则表达式默许是贪欲形式婚配,即在量词局限中取最大的谁人来婚配,所以第一个才会涌现两个NB,1-6婚配一个NB,7-9婚配一个NB。而第二个婚配局限是{3,7},结果是NB89,由于最大值是7,所以1-7婚配成NB,而剩下的8,9达不到3个,所以没有婚配胜利

《js正则表达式进修笔记》

这个非贪欲形式和贪欲形式相反,即取最小值来婚配,用法是在量词背面加?。
准确设置婚配形式关于处置惩罚庞杂的正则是很有好处的

分组

如今有如许的需求,婚配wensnb这个字符串涌现三次,是不是是有的同砚会说

wensnb{3}

如许固然是错啦,由于只会婚配b涌现三次,这时候就须要分组的观点

()能够起到分组的结果

《js正则表达式进修笔记》

用 | 示意或,下面的例子展现或在分组中的运用

《js正则表达式进修笔记》

()把nb和123分组,而且用|示意二者取其一

  • 反向援用

应用$举行分组中的援用,分别把分组中的内容对应$1….$n

《js正则表达式进修笔记》

  • 疏忽援用

并非一切的分组我们都愿望援用,用?:来疏忽援用

《js正则表达式进修笔记》

我们把上个例子中的第二个援用疏忽,所以援用个数由3变成2个,因而找不到$3
本来对应$3的24如今变成了$2,而$1稳定

前瞻

人人听这个名字前瞻就晓得一定有一个后顾和他对应,说的没错,只不过在js语法中的正则不支持后顾,所以我们只关注前瞻就够了

我们先来定义“前”:

在正则表达式中婚配是由文本头部到尾部(左到右),所以这个“前”代表的是文本的尾部

下面来定义前瞻:

正则表达式婚配到划定规矩时再向前搜检是不是相符断言或许不相符断言(也是正则)

《js正则表达式进修笔记》

正向和负向前瞻的区分就是婚配到正则以后是不是相符断言,相符断言称为正向前瞻,不相符就是负向前瞻

下面来看一个例子

《js正则表达式进修笔记》

在这个正向前瞻中,婚配一个单词字符(w不仅代表单词,还代表数字下划线)而且前面的还要相符数字1-3这个断言才行,因而我们把w e n这三个字符婚配到了

正则表达式的属性和要领

  1. 属性

    《js正则表达式进修笔记》

在文章的最先我们引见了修饰符globle,ignoreCase,multilines
实在这个都是正则表达式的属性,而且有两个我们没有说lastIndex和source
这五个属性都是只读,不能修正

《js正则表达式进修笔记》

《js正则表达式进修笔记》

  1. 要领

RegExp.prototype.test(str) //婚配传入的字符串符不相符正则划定规矩(true or false)

《js正则表达式进修笔记》

RegExp.prototype.exec(str)

    原文作者:wens
    原文地址: https://segmentfault.com/a/1190000008882634
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞