前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RegExp对象

RegExp对象

作者头像
天天_哥
发布2018-09-29 14:04:17
1.4K0
发布2018-09-29 14:04:17
举报
文章被收录于专栏:天天天天
1.什么是 RegExp?

正则表达式描述了字符的模式对象。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以是一个单独的字符。 更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。 您可以规定字符串中的检索位置,以及要检索的字符类型,等等。

功能:
  1. 模式匹配
  2. 文本检索
  3. 替换
2.语法
代码语言:javascript
复制
var patt=new RegExp(pattern,modifiers);

或更简单的方法

var patt=/pattern/modifiers;
模式描述了一个表达式模型。
  1. 修饰符(modifiers)描述了检索是否是全局,区分大小写等。
  2. 注意:当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。
代码语言:javascript
复制
比如,以下是等价的:
var re = new RegExp("\\w+");
var re = /\w+/;
3.RegExp 修饰符

修饰符用于执行不区分大小写和全文的搜索。

  • i - 修饰符是用来执行不区分大小写的匹配。
  • g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。
4.用于字符串的方法

在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。

  • search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
代码语言:javascript
复制
var str = "Visit Runoob!"; 
var n = str.search(/Runoob/i);
输出结果为:
6
  • replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
代码语言:javascript
复制
var str = document.getElementById("demo").innerHTML; 
var txt = str.replace(/microsoft/i,"Runoob");
结果输出为:
Visit Runoob!

修饰符

描述

i

执行对大小写不敏感的匹配。

g

执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。

m

执行多行匹配。

5.正则表达式模式

正则表达式: 是一个由字母数字和一些特殊符号组成的描述字符模式的对象。

创建:
代码语言:javascript
复制
1、通过RegExp()构造函数来创建(显式创建)
    var reg=new RegExp('表达式'[,修饰符]);

2、通过字面量(直接量)方式来创建(隐式创建)   --常用
    var reg=/表达式/[修饰符]

这含义上不一样,显示创建的是实例对象,隐式创建的是单个对象。

正则表达式的方法:
代码语言:javascript
复制
1、test()
    功能:用于检测是否于正则匹配。
    返回:布尔值,true匹配,false不匹配
    语法:reg.test(检测的内容)

2、exec()
    功能:用于检测是否于正则匹配。
    返回:如果匹配返回数组,不匹配返回null
    语法:reg.exec(检测的内容)

    说明:
        第一个数组元素存放的匹配的内容
        第二、三……数组元素存放的是分组所匹配的内容
        支持两个属性:
            index:匹配项的索引位置
            input:

元字符(字符类)

具有特殊含义的字符

[……]

匹配括号内的任意一个字符 [0-9a-zA-Z]

[^……]

匹配除了括号内的任意字符 [^0-9]

\d

数字

\D

非数字

\w

字母数字下划线

\W

非字母数字下划线

\s

空白字符(空格 制表符)

\S

非空白字符

.

除了换行符以外的任意字符

\n

换行符

\r

回车符

\t

制表符

限定符

限定符

解释

^xx

以xx开始

xx$

以xx结束

重复

重复

设置匹配的次数

{n}

匹配前一项n次

{n,m}

匹配前一项n到m次

{n,}

匹配前一项n到多次

*

匹配前一项0到多次

匹配前一项0到1次

匹配前一项1到多次

方括号

表达式

描述

[abc]

查找方括号之间的任何字符。

[^abc]

查找任何不在方括号之间的字符。

[0-9]

查找任何从 0 至 9 的数字。

[a-z]

查找任何从小写 a 到小写 z 的字符。

[A-Z]

查找任何从大写 A 到大写 Z 的字符。

[A-z]

查找任何从大写 A 到小写 z 的字符。

[adgk]

查找给定集合内的任何字符。

[^adgk]

查找给定集合外的任何字符。

(red

blue

green)

查找任何指定的选项。

转义字符:
  • 将特殊符号恢复成它字面本身意思
  • 通过:\ 这个符号来进行转义
  • 需要转义的符号 : [ ] { } ( ) . ? * + ^ $ \ /
选择:

| 或者

分组:

()可以将多个匹配项组合为一个整体

单字节:

字符串对象.replace(新节点,旧节点)

6.案例详解
修饰符
代码语言:javascript
复制
//g:global
//第一种
    var str = "hek45g4152";
    var reg = /\d/;
    console.log(str.replace(reg,"X"))//hekX5g4152
//第二种
    var str = "hek45g4152";
    var reg = /\d/g;
    console.log(str.replace(reg,"X"))//hekXXgXXXX

//i:ignore case
//第一种情况
    var str = "hek45gE4152";
    var reg = /e/g;
    console.log(str.replace(reg,"X"))//hXk45gE4152
//第二种情况
    var str = "hek45gE4152";
    var reg = /e/gi;
    console.log(str.replace(reg,"X"))//hXk45gX4152
范围类
代码语言:javascript
复制
//----------------------
        var str = "a1b2c3g4";
        var reg = /[a-z]/g;
        console.log(str.replace(reg,"X"));//X1X2X3X4

量词

代码语言:javascript
复制
//---------------------------------
        var str = "hek45gE4152";
        var reg = /\d{2}/g;
        console.log(str.replace(reg,"X"))//hekXgEXX

//-----------------------
        var str = "hek45gE4152";
        var reg = /\d{2,3}/g;
        console.log(str.replace(reg,"X"))//hekXgEX2

//-------------------------

        //贪婪模式:以量词的最大值为准
        var str = "5462187489";
        var reg = /\d{2,5}/;
        console.log(str.replace(reg,"X"))//X87489
        
        
        
        var str = "5462187489";
        var reg = /\d{2,5}/g;
        console.log(str.replace(reg,"X"))//XX
        
        //非贪婪模式
        var str = "5462187489";
        var reg = /\d{2,5}?/g;
        console.log(str.replace(reg,"X"))//XXXXX
单词边界(\b)
代码语言:javascript
复制
//-----------------------------
        var str = "this is a boy";
        var reg = /is/g;
        console.log(str.replace(reg,"X"))//thX X a boy

//-----------------------------
        var str = "this is a boy";
        var reg = /\bis\b/g;
        console.log(str.replace(reg,"X"))//this X a boy  
        
//------------------------------

        var str = "this is a boy";
        var reg = /\Bis\b/g;
        console.log(str.replace(reg,"X"))//thX is a boy

分组

代码语言:javascript
复制
//-----------------------
        var str = "mouse mouth moose lmomomop";
        var reg = /mo/g;
        console.log(str.replace(reg,"X"));//Xuse Xuth Xose lXXXp
        
        
//------------------------

        var str = "mouse mouth moose lmomomop";
        var reg = /mo{3}/g;
        //匹配mo连续出现三次,下边的代码没作用
        console.log(str.replace(reg,"X"));//mouse mouth moose lmomomop  
        
//------------------------

        var str = "mouse mouth moose lmomomop";
        var reg = /(mo){3}/g;
        console.log(str.replace(reg,"X"));//mouse mouth moose lXp

代码语言:javascript
复制
//-----------------
        var str = "mouse mouth moose lmomomop";
        var reg = /(mo)|(th)/;
        console.log(str.replace(reg,"X"));//Xuse mouth moose lmomomop
        
//----------------

        var str = "mouse mouth mooTHse lmomomop";
        var reg = /(mo)|(th)/g;
        console.log(str.replace(reg,"X"));//Xuse XuX XoTHse lXXXp
        
//--------------------

        var str = "mouse mouth mooTHse lmomomop";
        var reg = /(mo)|(th)/gi;
        console.log(str.replace(reg,"X"));//Xuse XuX XoXse lXXXp

前瞻

代码语言:javascript
复制
//前瞻的内容只作为匹配要求,但是不是表达式的内容,所以下边的替换中,那个“ . ”没有被替换
        var str = "mo2use mouth mooTHse lmo.momop";
        var reg1 = /(mo)(?=\w)/g;
        var reg2 = /(mo)(?=\d)/g;
        var reg3 = /(mo)(?!\d)/g;
        console.log(str.replace(reg1,"X"));//X2use Xuth XoTHse lmo.XXp
        console.log(str.replace(reg2,"X"));//X2use mouth mooTHse lmo.momop
        console.log(str.replace(reg3,"X"));//mo2use Xuth XoTHse lX.XXp

image.png

对象属性
代码语言:javascript
复制
//正则的对象属性是只读的,不能自己设置,只能在正则表达式中定义
        var reg1 = /[A-Z]/;
        var reg2 = /[0-9]/gim;
        console.log(reg1.global);//false
        console.log(reg1.ignoreCase);//false
        console.log(reg1.multiline);//false
        console.log(reg1.source);//[A-Z]
        console.log(reg1.lastIndex);//0

        console.log(reg2.global);//true
        console.log(reg2.ignoreCase);//true
        console.log(reg2.multiline);//true
        console.log(reg2.source);//[0-9]
        console.log(reg2.lastIndex);//0
对象方法
代码语言:javascript
复制
//代码演示----------------------------------------
    1、test()
       var str = "sj45def1sea48";
        var reg1 = /[a-z]\d[a-z]/g;
       console.log(str.replace(reg1,"X")) ;//sj45deXea48
        res = reg1.test(str);
        console.log(res)//true

    2、exec()
        功能:用于检测是否于正则匹配。
        返回:如果匹配返回数组,不匹配返回null
        语法:reg.exec(检测的内容)

        说明:
            第一个数组元素存放的匹配的内容
            第二、三……数组元素存放的是分组所匹配的内容
            支持两个属性:
                index:匹配项的索引位置
                input:存放被检测的字符串
//代码演示----------------------
        var str = "sj4d5ef1sea4e8g";
        var reg1 = /\d(\w)\d(\w)/g;
        console.log(str.replace(reg1,"X")) ;//sjXf1seaX
        res = reg1.exec(str);
        console.log(res);//["4d5e","d".index:2,input:"sj4d5ef1sea4e8"]
        //4d5e:匹配的内容
        //d:是表达式中的第一个分组的第一次匹配的内容,就是说表达式中第一个(\w)第一次匹配的内容
        //e:是表达式中的第二个分组的第一次匹配的内容,就是说表达式中第二个(\w)第一次匹配的内容
        //index:是返回的4d5中在字符串中的索引
        //input:是返回被匹配的字符串
用于字符串的方法
代码语言:javascript
复制
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
- search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
//--------------------------------------------------
var str = "Visit Runoob!"; 
var n = str.search(/Runoob/i);
输出结果为:
6

//------------------------------------------------
-match()方法
a)非全局
        var str = "ay1by2c3Y4";
        console.log(str.match(/\d\w/))//["1b", index: 2, input: "ay1by2c3Y4"]  返回结果和exec()方法返回类似
b)全局
        var str = "ay1by2c3Y4";
        console.log(str.match(/\d\w/g))//["1b", "2c", "3Y"] 返回的是被匹配的数组
//---------------------------------------------------

- replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

var str = document.getElementById("demo").innerHTML; 
var txt = str.replace(/microsoft/i,"Runoob");
结果输出为:
Visit Runoob!
//------------------------------------------

//replace方法的第二个参数支持函数表达式
        var str = "ay1by2c3Y4";
        console.log(str);//ay1by2c3Y4
        //将字符串中的数字替换为原来的数值加1
        console.log(str.replace(/\d(\w)/g,function(result,group,index,str){
                console.log(group);//b,c,Y
                console.log(index);//2,5,7
                console.log(str);//ay1by2c3Y4*4  原字符串打印四次
                return parseInt(result)+1
        }))//ay2y344
        //function(result,group,index,str){}
        //参数result是匹配的字符串
        //group:是匹配时分组里对应的内容,(和正则有关,没有分组就没有这个参数)
        //index:匹配项在字符串中的index
        //str:原字符串
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是 RegExp?
    • 功能:
    • 2.语法
      • 模式描述了一个表达式模型。
      • 3.RegExp 修饰符
      • 4.用于字符串的方法
      • 5.正则表达式模式
        • 创建:
          • 正则表达式的方法:
            • 限定符
              • 重复
                • 方括号
                  • 转义字符:
                    • 选择:
                      • 分组:
                        • 单字节:
                        • 6.案例详解
                          • 修饰符
                            • 范围类
                              • 单词边界(\b)
                                • 对象属性
                                • 对象方法
                                • 用于字符串的方法
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档