JavaScript正则表达式

正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

搜索模式可用于文本搜索和文本替换。

正则表达式是由一个字符序列形成的搜索模式。

当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

1.1 语法

/正则表达式主体/修饰符(可选)

其中 // 是临界符   i 是修饰符

var patt = /move/i

 

/move/i 是一个正则表达式。

move 是一个正则表达式主体 (用于检索)。

i 是一个修饰符 (搜索不区分大小写)。

正则表达式是一种验证规则,是以对象的形式存在的

ECMAScript的RegExp类表示正则表达式

1.通过构造函数创建

reg=new RegExp(“正则表达式”,”模式修正符”)

var reg = new RegExp("daili");

var stat = reg.test("dailifang");

alert(stat);

2.通过字面量方式创建

var reg = /daili/i;

var stat = reg.test("dailifang");

alert(stat);

通常将正则表达式字符串放在  /RegExp/  中间//称为定界符

使用 test()

正则对象.test(str)

–返回一个布尔值,它指出在被查找的字符串中是否存在符合正则规则要求的内容。

test() 方法是一个正则表达式方法。

test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

 {
            var str='this is my life.'
        //正则表达式的创建 方法1
        // var reg=/my/;
        // var reg=/小马/
        var reg=/MY/i
        if(reg.test(str)){
            console.log('有符合正则的信息');
           
        }else{
            console.log('没有符合正则的信息');
       
        }
        }
//有符合正则的信息
 {
        var str='this is my life.'
        //正则表达式的创建 方法1
        // var reg=/my/;
        // var reg=/小马/
        var reg=new RegExp('MY','i')
        if(reg.test(str)){
            console.log('有符合正则的信息');
           
        }else{
            console.log('没有符合正则的信息');
       
        }
    }
//有符合正则的信息

使用字符串方法

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

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。

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

exec方法

用正则去匹配字符串,成功返回数组,失败返回null

返回的数组包含特殊属性:

var re= reg.exec(str);

str -被匹配的字符串

匹配返回数组中的index 表示 -子符串位置(这个正则出现在字符串里的首次位置)

你检索的内容它在字符串中的位置

如果采用g修饰符

如果设置了g,那么exec执行之后会更新正则表达式的lastIndex属性,表示本次匹配后,所匹配字符串的下一个字符的索引,下一次再用这个正则表达式匹配字符串的时候就会从上次的lastIndex属性开始匹配。

 {
        var str4 = '新款连衣裙 四件套 潮流T恤 时尚连衣裙 短裤 半身裙 连衣裙外套 墙纸 行车记录仪 新款男鞋 耳机 时尚女包 沙发';
console.log(str4);
// var res4 = str4.replace('连衣裙', '羽绒服');

// 目标值 是 正则表达式/连衣裙/g, 可以把字符串中 所有的 '连衣裙' 替换为'羽绒服' 
var res4 = str4.replace(/连衣裙/g, '羽绒服');
console.log(res4);
    }

预览:

1.2 正则表达式修饰符

修饰符 可以在全局搜索中不区分大小写:

正则表达式,用在字符串对象的方法中:

1.3 正则表达式模式

方括号用于查找某个范围内的字符:

原子表

[ ] 只匹配其中的一个原子

[^]  只匹配"除了"其中字符的任意一个原子

[0-9] 匹配0-9任何一个数字

[a-z] 匹配小写a-z任何一个字母

[A-Z] 匹配大写A-Z任何一个字母

原子是正则表达式中的最小的元素,包括英文、标点符号等

原子---元字符是拥有特殊含义的字符:

\d   匹配任意一个数字 [0-9]

\D  与除了数字以外的任何一个字符匹配 0-9

\w  与任意一个英文字母,数字或下划线匹配 [a-z0-9A-Z_]

\W 除了字母,数字或下划线外与任何一个字符匹配 a-z0-9A-Z_

\s  与任意一个空白字符匹配 [\n\f\r\t\v]

\S 与除了空白符外任意一个字符匹配 \n\f\r\t\v

原子(分)组

 匹配多个字符时用()分组,分组代表一个原子集合或者说一个大原子,并压入堆栈(内存)用于调用,组号是从左到右计数的调用时:如果是字面量形式用**\1,构造函数方式用**\1 ,也就是说(\1或\1)=(dlf),这种方式我们叫做反向引用。例:

 var reg = new RegExp("(dlf)123\\1","i");

 alert(reg.test("dlf123hdw"));

 

注意:

原子组与原子组之间 要使用 加+串联。没有 加+,会报错误。

var reg = /^(\w-*\.*)+@+(\w-?)+(\.\w{2,}$)/;

 

量词

可以使用一些元字符,重复表示一些原子或元字符

*  重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n}  重复n次

{n,}  重复n次或更多次

{n,m}  重复n到m次

注意:使用 量词的时候,要给你的正则模式 设置 匹配边界(使用 ^ 和 $ ) 指定一个区间。然后让其重复。

// \d === [0-9]
        var reg = /^\d{3,6}$/;
        var str = '1234567';
        var r = reg.test(str);
        console.log(r)

 

贪婪和吝啬

正则匹配是贪婪的,禁止贪婪用 ?

*?  重复任意次,但尽可能少重复

+?  重复1次或更多次,但尽可能少重复

??        重复0次或1次,但尽可能少重复

{n,m}?  重复n到m次,但尽可能少重复

{n,}?  重复n次以上,但尽可能少重复

匹配边界

字符边界

^ 匹配字符串的开始

$ 匹配字符串的结束,忽略换行符

/^[a-zA-Z]/  代表以字母开头
/^1[0-9]{10}$/ 或者/^1[\d]{10}$/ 代表以数字1开头,数字0-9结尾

 

1.4 常用的验证

JS正则表达式验证账号、手机号、电话和邮箱

验证帐号是否合法

验证规则:字母、数字、下划线组成,字母开头,4-16位。

<script>
// 验证账户 用户输入是否合法
// 验证规则:字母、数字、下划线组成,字母开头,4-16位。
   
    var username='tom_12345678912345'

    function checkedName(str){
        //正则规则(正则表达式)
        // var reg=/^[a-zA-Z][a-z0-9A-Z_]{4,16}/;
        var reg=/^[a-zA-Z]\w{4,16}$/;
        if(reg.test(str)){
            console.log('合法');
        }else{
            console.log('不合法');
           
        }

    }
    checkedName(username)
   //输出不合法

    </script>

 

注意:这里的 \w{4,16}  其中 量词{4,16}  修饰的是 要求 \w出现的内容,重复出现4-16次。

验证手机号码

验证规则:11位数字,以1开头。

 //验证手机号码
        //验证规则:11位数字,以1开头。
        //$以前面指定的内容结束。
        var phone='13866002972'
        // var reg=/^1[0-9]{10}$/;

        function checkPhone(str){
            var reg=/^1[\d]{10}$/;
            if(reg.test(str)){
                console.log("手机号码校验合法");
               
            }else{
              console.log("手机号码校验不合法");
           
            }

        }
        checkPhone(phone)
//手机号码校验合法

验证电话号码

验证规则:区号+号码,区号以0开头,3位或4位

号码由7位或8位数字组成

区号与号码之间可以无连接符,也可以“-”连接

// 验证电话号码
// 验证规则:区号+号码,区号以0开头,3位或4位
// 号码由7位或8位数字组成
// 区号与号码之间可以无连接符,也可以“-”连接 

//010
//0551
//-
//55667788

var tel='0551-55667788';
function checkedTel(str){
    //{7,8}对 前面内容的要求,要求前面的内容,重复出现 几次,我们这里是要求 前面的数字 可以重复出现 7次 或 8次
    var reg=/^0[0-9]{2,3}-?[0-9]{7,8}$/;
    if(reg.test(str)){
            console.log('合法');
        }else{
            console.log('不合法');
           
        }
}
checkedTel(tel)
//输出合法
    </script>

验证邮箱

验证规则:姑且把邮箱地址分成“第一部分@第二部分”这样

第一部分:由字母、数字、下划线、短线“-”、点号“.”组成,

第二部分:为一个域名,域名由字母、数字、短线“-”、域名后缀组成,

而域名后缀一般为.xxx或.xxx.xx,一区的域名后缀一般为2-4位,如cn,com,net,现在域名有的也会大于4位

<script>
// 验证邮箱
// 验证规则:姑且把邮箱地址分成“第一部分@第二部分”这样
// 第一部分:由字母、数字、下划线、短线“-”、点号“.”组成,
// 第二部分:为一个域名,域名由字母、数字、短线“-”、域名后缀组成,
// 而域名后缀一般为.xxx或.xxx.xx,一区的域名后缀一般为2-4位,如cn,com,net,现在域名有的也会大于4位


    // var email='xiaoyu123@souhu.com';
    // var email='xiaoyu123';
    var email='xiaoyu123@';
    function checkedEmail(str){
        //第一个 *星号 表示 它前面的内容,可以出现0次或更多次
        //第二个 *星号 表示 它前面的 这个点 . 可以出现0次或更多次
        var reg=/^([a-z0-9A-Z_-]*\.*)+@([a-z0-9A-Z_-]?)+(\.[a-z0-9A-Z_-]{2,}?)$/;
        // var reg=/^(\w-*\.*)+@(\w-?)+(\.\w{2,}?)$/;
        if(reg.test(str)){
            console.log('合法');
        }else{
            console.log('不合法');
           
        }
    }
    checkedEmail(email)
    
    //输出不合法
    </script>

验证网址

 <script>
        // 验证网址
        // 验证规则: http://   www.  baidu.
        // http://www.baidu.com
        // https://www.baidu.com

    // var url="https://www.baidu.com"
    var url="https://baidu.com"

    var url="https://baidu.c"

     
    function checkedUrl(str){
        //(http|https):\/\/?   ?表示可以出现也可以一次都不出现
        //(www)?       ?表示www这个内容可以出现也可以一次都不出现
        //(\.?)   ?表示前面的 .点可以不用出现,也可以出现一次


        // \.点 写在原子表[]的不能和- 共存 ,可以把.点 写在短横线的前面 不能写在短横线的后面 否则会报bug,把它放置在中间写不会报bug
        var reg=/((http|https):\/\/?)+((www)?)+(\.?)+([a-z0-9A-Z_-]{2,}?)+(\.)+([a-zA-Z]{2,})/;

        if(reg.test(str)){
            console.log('合法');
        }else{
            console.log('不合法');
           
        }
    }
    checkedUrl(url)

//输出不合法
    </script>

手机号码中间四位用星号代替

<script>
        // 手机号码中间四位用星号代替
        var phone='13866002972'
       
        var reg=/(\d{3})\d{4}(\d{4})/;
        var res=phone.replace(reg,'$1****$2')
        console.log(res);
       
    </script>

预览:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值