正则表达式

什么是正则表达式:

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。在JavaScript中正则表达式也是一种对象。

它经常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单,用户名输入框只能输入英文字母、数字、下划线。昵称输入框中可以输入中文。此外,正则表达式还用于过滤掉页面中的一些敏感词,或从字符串中获取我们想要的特性部分。

正则表达式特点:

1.灵活性、逻辑性、功能性强。

2.可以讯速地用极简单的方式达到字符串的复杂控制。

3.对于刚接触的人来说,比较晦涩难懂。

4.实际开发,一般都是直接复制写好的正则表达式,但是要求会使用正则表达式并根据实际情况对它进行修改。

正则表达式的创建:

//1.利用regexp对象来创建正则表达式
        var regexp = new RegExp(/123/)
        console.log(regexp);
//2.利用字面量创建正则 表达式
        var rg = /123/

其中,test方法用来检测字符串是否符合正则表达式要求的规范。

符合返回true,反之返回false。

如下:

 var rg = /123/
        console.log(rg.test(123));
        console.log(rg.test('abc'));

正则表达式的组成:

一个正则表达式可以由简单的字符串构成,比如/abc/。也可以是简单和特殊字符的组合,比如/ab*c/。其中,特殊字符也被称为元字符,在正则表达式中是具有特殊意义的特殊符号,比如$ ^  + 等。

边界符:正则表达式中的边界符用来提示字符所处的位置,主要有两个字符。

 注意:边界符^ 假如出现在[ ]内部 则表示取反  与这里的边界符意义不同 

字符类:[ ]表示有一系列字符可供选择,只要匹配其中一个就可以了。

如下例子:

 // var rg = /abc/   只要包含abc就可
        // 字符类:[ ]表示有一系列字符可供选择,只要匹配其中一个就可以了。
         var rg = /[abc]/   //只要包含有a 或b 或c 都返回true
        console.log(rg.test('andy'));    //true
        console.log(rg.test('red'));    //false
        console.log(rg.test('box'));  //true
        var rg1 = /^[abc]$/     //只有a 或只有b 或只有c  这三个字母才返回true
        console.log(rg1.test('a'));     //true
        console.log(rg1.test('b'));    //true
        console.log(rg1.test('c'));    //true
        console.log(rg1.test('ab'));   //false
        console.log(rg1.test('abcd'));  //false
        console.log(rg1.test('abc'));    //false
        var reg = /^[a-z]$/   //26个英文字母 任何一个都返回true   -表示a到z的范围
        console.log(reg.test('a'));   //true
        console.log(reg.test('z'));    //true
        console.log(reg.test('1'));   //false
        console.log(reg.test('A'));    //false
        var reg1 = /^[a-zA-Z0-9-_]$/   //26个英文字母(大小写均包含) 0-9 和 - _ 其中的任意一个
        console.log(reg1.test('a'));    //true
        console.log(reg1.test('8'));    //true
        console.log(reg1.test('-'));    //true
        console.log(reg1.test('_'));    //true
        console.log(reg1.test('A'));    //true

        var reg2 = /^[^a-zA-Z0-9-_]$/   //在[]内部的^表示取反 这里的含义是 不能包含有所描述的内容中的任何一个 
         console.log(reg1.test('a'));    //false
        console.log(reg1.test('8'));    //false
        console.log(reg1.test('-'));    //false
        console.log(reg1.test('_'));    //false
        console.log(reg1.test('A'));    //false

量词: 用来设定某个模式出现的次数。

// *相当于 >=0 可以出现0次或多次
        var reg = /^a*$/
        console.log(reg.test(''));   //true
        console.log(reg.test('a'));   //true
        console.log(reg.test('aaaaa'));    //true
        console.log('---------------------');

// + 相当于 >=1   可以出现 1次或多次
        var reg1 = /^a+$/  
        console.log(reg1.test(''));      //false
        console.log(reg1.test('a'));    //true
        console.log(reg1.test('aaaaa'));     //true
        console.log('---------------------');
// ?相当于 1 || 0 可以出现1次或0次
        var reg2 = /^a?$/
        console.log(reg2.test(''));  //true
        console.log(reg2.test('a'));   //true
        console.log(reg2.test('aaaaa'));    //false
//  {3}    就是重复3次
        var reg3 = /^a{3}$/    
        console.log(reg3.test(''));   //false
        console.log(reg3.test('a'));   //false
        console.log(reg3.test('aaa'));   //true
        console.log('---------------------');
//  {3,}   大于等于3次
        var reg4 = /^a{3,}$/
        console.log(reg4.test(''));     //false
        console.log(reg4.test('a'));     //false
        console.log(reg4.test('aaa'));    //true
        console.log(reg4.test('aaaaaa'));  //true
        console.log('---------------------');
        
// {3,15}  >=3 && <=16 次
        var reg5 = /^a{3,16}$/
        console.log(reg5.test(''));     //false
        console.log(reg5.test('a'));    //false
        console.log(reg5.test('aaa'));   //true 
        console.log(reg5.test('aaaaaa'));   //true
        console.log(reg5.test('aaaaaaaaaaaaaaaaaaaaaaaaa'));  //false

将量词与字符结合  组成完整的用户名表单的正则表达式

 // 量词: 用来设定某个模式出现的次数。
        var reg = /^[a-zA-Z0-9-_]{6,15}$/        //{6,15}的左侧不能有空格
        console.log(reg.test('andy123'));    //true
        console.log(reg.test('007-_AZC'));    //true
        console.log(reg.test('andy123456!'));     //false
        console.log(reg.test('andy1234678921521010'));    //false

正则表达式中的括号总结:

1.大括号、量词符里边表示重复次数。

2.中括号,字符集合,匹配方括号中的任意字符。

3.小括号表示优先级。

这里有相关小括号的例子:

var reg = /^abc{3}$/     //他只是让c重复3次
        console.log(reg.test('abccc'));   //true
        console.log(reg.test('abc'));   //true
        console.log(reg.test('abcabc'));    //false
        console.log('-------------------------------');
        var reg1 = /^(abc){3}$/     
        console.log(reg1.test('abccc'));    //false
        console.log(reg1.test('abc'));      //false
        console.log(reg1.test('abcabcabc'));       //true

预定义类: 预定义类指的是某些常见模式的简写方式

利用预定义类进行座机号码验证:

//座机号码验证   两种格式 010-12345678    0530-1234567
        var reg = /^\d{3}-\d{8}|\d{4}-\d{7}$/      //  | 在正则表达式中是或的意思

正则表达式中的替换 :

replace替换:

replace()方法可以实现替换字符串操作,用来替换的参数可以是一个字符串或一个正则表达式。

语法格式:

stringObject.replace(regexp/substr,replacement)
var str = 'andy和baby'
        var newStr = str.replace('andy','baby')
        console.log(newStr);

它将andy替换成了baby ,不会影响原来的字符串,而是返回一个新的字符串。 

 

正则表达式参数:

/表达式/[switch]

switch也称为修饰符(按照什么样的模式来匹配),有三种值:

g:全局匹配; g是global的意思

i:忽略大小写;   

gi:全局匹配+忽略大小写。

例子:将textarea中的内容在按下按钮后替换我们规定的字符为**。并显示在div里。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            background-color: #ccc;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <textarea name="" id="" cols="30" rows="10" class="text"></textarea><button>提交</button>
    <div></div>
    <script>
        // var str = 'andy和baby'
        // var newStr = str.replace('andy','baby')
        // console.log(newStr);
        // console.log(str);
        var text =document.querySelector('.text')
        var btn = document.querySelector('button')
        var div = document.querySelector('div')
        btn.onclick = function() {
            div.innerHTML = text.value.replace(/激情|gay/g,'**')
        }
    </script>
</body>
</html>

利用正则表达式进行表单验证:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .right {
           color: greenyellow;
        }
        .wrong {
            color: red;
        }
    </style>
</head>
<body>
    <input type="text" class="uname"/>
    <span>请输入用户名</span>
    <script>
        // 量词: 用来设定某个模式出现的次数。
        var reg = /^[a-zA-Z0-9-_]{6,15}$/        //{6,15}的中间不能有空格
        var uname = document.querySelector('.uname')
        var span = document.querySelector('span')
        uname.onblur = function() {
            if(reg.test(this.value)) {
                span.innerHTML = '用户名格式输入正确'
                span.className = 'right'
            } else {
                span.innerHTML = '用户名格式输入有误,请重新输入'
                uname.value = ''
                span.className = 'wrong'
            }
        }

    </script>
</body>
</html>

输入正确时:

输入有误时:

正则表达式在线测试:

菜鸟工具 - 不止于工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hcoke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值