JavaScript--正则表达式

目录

        概述

        语法

        修饰符 

        范围符

        元字符

        量词符

        RegExp对象方法

        string对象方法

        RegExp对象属性

        优先级关系


概述

        正则表达式描述了一种字符串匹配的模式,通常用于检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的字串等。简单来说,正则就是匹配模式,用于匹配字符或者匹配位置。

语法

        首先我们先了解JavaScript中的RegExp对象,RegExp是正则表达式的简写,是用于创建正则对象的方法之一。正则对象的创建方法如下:

●var 变量名 = /表达式/修饰符

●var 变量名 = new RegExp(/表达式/修饰符)

修饰符 

        修饰符用于执行区分大小写和全局匹配,常用的修饰符如下

修饰符作用
i忽略大小写
g在目标字符串中实现全局匹配
m实现多行匹配

范围符

        范围符通常用于指定查找字符的范围

表达式描述
^匹配行首文本
$匹配行尾文本
[字符串]查找方括号之间的任意字符
[^字符串]查找任意不在方括号之间的字符
(字符串1|字符串2|字符串3)查找任意指定的选项

元字符

        元字符是拥有特殊含义的字符

符号描述符号描述
\w匹配数字、字母、下划线(=[a-zA-Z0-9])\d匹配0-9之间的任意数字(=[0-9])
\W匹配除了数字、字母、下划线的字符(=[^a-zA-Z0-9])\D匹配除了0-9之间的任意字符(=[^0-9])
\s匹配空白符(例如换行符、制表符、空格符等)(=[\t\r\n\v\f])\b匹配单词分界符
\S匹配非空白符(=[^\t\r\n\v\f])\B非单词分界符
.匹配除"\n"外的任意单个字符\0匹配NULL字符
\n匹配换行符\f匹配换页符
\r匹配回车符\t匹配制表符
\v匹配垂直制表符\xxx匹配以八进制数xxx规定的字符
\xdd匹配以十六进制数dd规定的字符\uxxxx匹配以十六进制数xxxx规定的Unicode字符

量词符

        量词符用于规定某个模式匹配次数

量词描述量词描述
+匹配+前面的字符1次或多次n{x,}匹配{}前面的字符至少x次
*匹配*前面的字符0次或多次n{x,y}匹配{}前面的字符至少x次至多y次
?匹配?前面的字符0次或1次?=n匹配任何其后紧接指定字符串n的字符串
n{x}匹配{}前面的字符x次?!n匹配任何其后没有紧接指定字符串n的字符串

RegExp对象方法

方法描述
exec()用于检索字符串中的正则表达式匹配,有则返回匹配值,反之返回null
test()用于检测一个字符串是否匹配某个模式,有匹配的值返回true,反之返回false
tostring()返回正则表达式的字符串

        创建检索字符串和正则对象:

        var str = 'abcde';
        // 创建正则对象
        var reg1 = /bc/g;
        var reg2 = /bu/g;

        检索字符串中指定的值并返回方法:

        // 检索字符串中指定的值并返回
        document.write(reg1.exec(str));   //bc
        document.write("<br>",reg2.exec(str));  //null

        检索字符串中指定的值方法:

        // 检索字符串中指定的值
        document.write("<br>",reg1.test(str));  //true
        document.write("<br>",reg2.test(str));  //false

        返回正则表达式的字符串方法:

        // 返回正则表达式的字符串
        document.write("<br>",reg1.toString()); // /bc/g
        document.write("<br>",reg2.toString()); // /bu/g

        需要注意的是,exec()和test()方法不能同时使用。如果先使用exec()再使用test(),exec()方法能正常使用,test()使用出错,无论是否找到检索字符串中指定的值,都返回false;如果先使用test()再使用exec(),test()方法能正常使用,exec()使用出错,无论是否找到检索字符串中指定的值,都返回null

string对象方法

方法描述
search()检索与正则表达式相匹配值,没找到返回-1
match()找到一个或多个正则表达式匹配
replace()替换与正则表达式匹配的子串
split()将字符串分割为字符串数组

search()方法:

        该方法返回的值是指定查找的字符串或者正则表达式相匹配的string对象起始位置,起始位置从0开始,需要注意的是对空白符敏感,空白符也计入查找

        var str = "abcde";
        document.write(str.search('cde'));  //2
        document.write("<br>",str.search('abc'));  //0
        document.write("<br>",str.search('a23'));  //-1

match()方法:

        该方法可以在字符串内检索指定的值,或找到一个或者多个正则表达式的匹配,返回的是找到的值

        var str = "AaBbAaCcAa";
        // 全局匹配不分大小写的a字母
        document.write(str.match(/a/gi));  //A,a,A,a,A,a

replace()方法:

        该方法用于在字符串中用指定字符替换另一些字符,或者替换一个与正则表达式匹配的字串

        var str = "abcdefCdgcDhCD";
        // 全局替换,忽略大小写
        document.write(str.replace(/cd/gi,123));  //ab123ef123g123h123

split()方法:

        该方法用于将一个字符串分割成字符串数组,该方法不会改变原始字符串。与上面不同的是,该方法多了一个可选参数:

split(separator,limit)

        separator:可选,分割参数,从该参数指定的地方进行分割

        limit:可选,返回指定数组最大长度

        var str = "Today is a nice day!";
        // 省略分割参数
        document.write(str.split()); //Today is a nice day!
        // 分割每个字符,包括空格
        document.write("<br>",str.split("")); //T,o,d,a,y, ,i,s, ,a, ,n,i,c,e, ,d,a,y,!
        // 以空格作为分割参数
        document.write("<br>",str.split(" ")); //Today,is,a,nice,day!
        // 以空格作为分割参数,并限制返回长度最大为3
        document.write("<br>",str.split(" ",3)); //Today,is,a
        // 以字符i作为分隔符
        document.write("<br>",str.split("i")); //Today ,s a n,ce day!

RegExp对象属性

属性描述
constructor返回创建RegExp对象的构造函数
global判断是否设置修饰符'g'
ignoreCase判断是否设置修饰符'i'
multiline判断是否设置修饰符'm'
source返回正则表达式匹配模式
lastIndex规定下次匹配的起始位置(该属性只有设置标志g才能使用)

        测试情况:

        var reg1 = new RegExp("abcde",'gim');
        var reg2 = /abc123/;
        //返回创建RegExp对象的构造函数
        document.write(reg1.constructor);  //function RegExp() { [native code] }
        document.write("<br>",reg2.constructor); //function RegExp() { [native code] }
        //判断是否设置修饰符'g'
        document.write("<br>",reg1.global); //true
        document.write("<br>",reg2.global); //false
        //判断是否设置修饰符'i'
        document.write("<br>",reg1.ignoreCase); //true
        document.write("<br>",reg2.ignoreCase); //false
        //判断是否设置修饰符'm'
        document.write("<br>",reg1.multiline); //true
        document.write("<br>",reg2.multiline); //false
        //返回正则表达式匹配模式 
        document.write("<br>",reg1.source); //abcde
        document.write("<br>",reg2.source); //abc123

        对于lastIndex属性,该属性用于规定下次匹配次数,上一次的匹配结果是由方法RegExp.exec() 和 RegExp.test() 找到的,它们是以lastIndex属性所指的位置作为下次检索的起始点。反复调用这两个方法,可以遍历一个字符串中的所有匹配文本。

        注意点:该属性只有设置标志g才可以使用;该属性是可读可写的,只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法RegExp.exec() 和 RegExp.test()找不到可以匹配的文本,会自动将lastIndex属性重置为0.

        var str = "abcde 123ab c456bcde789bc";
        var reg = /bc/g;
        // 遍历字符串str中对reg匹配文本
        while(reg.test(str) === true){
            document.write(reg.lastIndex);
            document.write("<br>")
        }
        /* 输出结果:
            3
            18
            25 */

优先级关系

        正则表达式符号也有优先级,由高到低排序如下所示:

符号说明
\转义符
()、(?)、(?=)、[]圆括号与中括号
*、+、?、{x}、{x,}、{x,y}限定符
^、$、\任意元字符、\任意字符定位点、序列
|“或”操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值