正则表达式的小笔记

JavaScript正则表达式

1.了解正则表达式的语法。

2.在IDE中使用正则表达式处理规则复杂的字符串查找,替换需求。

3.在JavaScript程序设计中使用正则表达式处理字符串。

正则表达式概念:

Regular Expression使用单个字符串来描述,匹配一系列符合某个句法规则的字符串。简单说,就是按照某种规则去匹配符合条件的字符串。regexper

正则表达式工具:http://regexper.com



RegExp对象:

JavaScript通过内置对象RegExp支持正则表达式

有两种实例化RegExp对象的方法:

1.使用字面量

2.使用构造函数



字面量:

var reg = / \bis\b /g;   替换is        \b单词边界,确保匹配的是is不是this这种。  最后那个g是用来表示全局global,如果加g是全局匹配,如果不加是匹配完了第一个,后面的不匹配。

.replace(reg, ' ')    这个replace方法,第一个参数可以传字符串,也可以传正则表达式。第二个参数传递的是要替换成为的内容。

'this is xxx, that is ooo'.replace(reg,'IS')



构造函数:

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

'this is xxx, that is ooo'.replace(reg,'IS')



修饰符:

g:global全局搜索,不添加此项则搜索到第一个就匹配停止

i:ignore case忽略大小写,正常的正则表达式,是默认对大小写敏感的。

m:multiple lines多行搜索。当被处理的字符串有换行符的时候,吧换的行全部当做新的一行。

eg:  'this is xxx, that is ooo'.replace(/\bis\b/gi,'IS')



元字符:

正则表达式由两种基本字符类型组成:

1.原义文本字符:写啥就代表啥

2.元字符:在正则表达式中有特殊含义的非字母字符。比如\b,这个就表达匹配并不是\b而是字符边界。

* + ? $ ^ . | \ ( ) { } [ ]


正则表达式的小笔记_第1张图片
元字符



字符类:

1.一般情况下,正则表达式一个字符,对应字符串一个字符。

  eg:ab\t的含义      --"ab"--tab--

2.我们可以使用元字符[ ]来构建一个简单的类。所谓类,就是指符合某些特性的对象,一个泛指。

  eg:[abc]的含义      "a" or "b" or "c" 有abc中一个即可。

         'a1b2c2'.replace(/[abc]/g, 'x')               ------"x1x2x3"



字符类取反:

1.使用元字符^创建反向类/负向类:即不属于某类的内容

  eg:[^abc]的含义         不是字符a or b or c的内容。

         'a1b1c3d4'.replace(/[^abc]/g, 'X')            ---------"aXbXcXXX"



范围类:

正则提供了范围类,来简化范围类型过滤。

eg:[a-z]的含义是   从a-z的任意字符,且这是闭区间,包含a和z本身。

       'a1b2d3x4z9'.replace(/[a-z]/g, 'Q')               ---------Q1Q2Q3Q4Q9

eg:[a-zA-Z]组成类内部连写,表示       大写,或者小写a-z都可以匹配。

ps:短横线在字符之间,表示的是范围,在最后,表示匹配短横线

        '2018-09-08'.replace(/[0-9]/g, 'A')        -------AAAA-AA-AA

        '2018-09-08'.replace(/[0-9-]/g, 'A')        -------AAAAAAAAAA




预定义类:

正则表达式提供了预定义类,来匹配常见的字符类。


正则表达式的小笔记_第2张图片
预定义类

eg:匹配一个ab + 数字 + 任意字符 的字符串

        /ab\d./



边界:


正则表达式的小笔记_第3张图片
边界

eg:'this is a test'.replace(/\Bis\b/g , '0');        ------th0 is a test

        'this is a test'.replace(/\bis\b/g , '0');        ------this 0 a test

        '@123@bxd@'replace(/@./g, 'Q');         -------Q123Qbxd@

         '@123@bxd@'replace(/^@./g, 'Q');        ----------Q123@bxd@

        '@123@bxd@'replace(/.@$/g, 'Q');        ----------@123@bxdQ



量词:


正则表达式的小笔记_第4张图片
量词




贪婪模式&非贪婪模式:

贪婪模式:默认

'12345678'.replace(/\d{3,6}/g, 'X');                    ---------X78

在这种模式下是匹配3-6次。会选择匹配6次,尽可能多的匹配。

非贪婪模式:在量词后面加?

'12345678'.replace(/\d{3,6}?/g, 'X');                    ---------XX78

尝试最少可能就匹配成功。



分组:

eg:匹配字符串Byron连续出现三次的场景。

      使用Byron{3}此处是匹配n循环3次,量词只能作用于紧挨着他的字符。不可以作用于全局。所以需要分组,使用()可以达到分组的功能,使量词作用于分组。(Byron){3}

'a1b2c4'.replace(/([a-z]\d){3}/, 'x');         --------x

或:使用   |

eg:'ByronsperByrCasper'.replace(/Byr(on|Ca)sper/g, 'x');              -----------xx

反向引用:

eg:2015-12-25   =>  12/25/2015

'2015-12-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$3-$2-$1')

首先,需要注意,只有用()分组后,才能使用$1  $2   $3这种。

其次,需要replace替换的时候需要加引号。

忽略分组:

不希望捕获某些分组,只需要在分组内加上?:就可以了

(?:Byron).(OK)     此处ok就是分组1



前瞻:

正则表达式,从文本的头部向文本的尾部开始解析,文本尾部的方向,称为‘前’

前瞻,就是在正则表达式匹配到规则的时候,向前检查是否符合断言。与后顾/后瞻相反,js不支持后顾。

类似于。匹配到一个儿子符合规则,他老子符合规则吗。或者匹配到他老子符合规则,他儿子符合吗。

对于符合特定断言的称为肯定/正向匹配。

对于不符合的称为否定/负向匹配。


正则表达式的小笔记_第5张图片
前瞻后顾

'a2*34v8'.replace(/\w(?=\d)/g, 'x');           ----------x2*x4X8

ps:其中(?=\d)部分只是断言,并非正则,他只是条件,不参与过滤。



对象属性:

global:是否是全局搜索,默认false

ignore case:是否是大小写铭感,默认false

multiline:多行搜索,默认false

lastIndex:当前表达式匹配内容后,表示当前表达式最后一个字符的下一个位置

source:正则表达式的文本字符串



test & exec 方法:

RegExp.prototype.test(str)    参数是字符串

用来测试字符串参数中是否存在匹配正则表达式模式的字符串。存在返回true,反之返回false。

RegExp.prototype.exec(str)   参数是字符串

使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。

如果没有匹配的文本则返回null,否则返回一个结果数组:

--index   声明匹配文本的第一个字符的位置

--input  存放被检索的字符串string



字符串对象方法:

String.prototype.search(reg)

参数可以是字符串也可以是正则表达式。用于检索字符串中指定子字符串,或者检索与正则表达式相匹配的子字符串。如果有,返回第一个匹配结果index,查不到返回-1。此方法不执行全局匹配,总是从字符串的开始进行检索。

String.prototype.match(reg)

是用于检索字符串,找到一个或者多个与regexp匹配的文本,对全局g敏感。     

String.prototype.split(reg)

用于吧字符串切割成数组,在一些负责的情况,我们可以使用正则表达来切割。

String.prototype.replace(reg)

第一个参数查找匹配内容,第二个替换内容。

匹配内容可以是正则,可以是字符串

替换内容可以是字符串,可以是function函数返回值。

如果替换的是function函数,function可以传入4个参数,

匹配字符串;正则表达式分组内容,木有分组则没有该参数;匹配项目在字符串中的index;原字符串;

你可能感兴趣的:(正则表达式的小笔记)