JavaScript基础之正则表达式

1.概念

正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。

正则表达式目前被集成到了各种文本编辑器/文本处理工具当中

2.创建方式

     (1) 字面量创建

var reg = /day/ig;

     (2)  构造函数创建

var reg = new RegExp("day","ig");

3.语法

    (1) 规则(表达式)   写在 // 之间

     2. 修饰符 i (忽略大小写)   g (全局匹配(匹配整个字符串 多次,也称为贪婪模式) 如果不加g默认只匹配一次,也称为非贪婪模式)

// 没有加忽略大小写
var str = "good good study , Day dAy up";
var reg = /day/;
var result = str.search(reg);//search方法是返回某个或某段字符 在字符串中第一次出现的位置   => 存在 返回下标,不存在返回-1
console.log(result);//-1

// 加忽略大小写
var str = "good good study , Day dAy up";
var reg = /day/i;//忽略大小写
var result = str.search(reg);
console.log(result);//18

// 开启非贪婪模式
var str = "good good study , day day up";
var reg = /day/; //忽略大小写
var result = str.replace(reg, "money");
console.log(result); //good good study , money day up

// 开启贪婪模式
var str = "good good study , day day up";
var reg = /day/g; //忽略大小写 全局匹配
var result = str.replace(reg, "money");
console.log(result); //good good study , money money up

 

4. 正则的相关方法

     (1) test()   判断字符串中是否 含有 符合规则的 某个或某段字符 有=> true, 没有=>false

var str = "good good study , Day dAy up";
var reg = /day/;
var result = reg.test(str);
console.log(result); //false

var str = "good good study , Day dAy up";
var reg = /day/ig;
var result = reg.test(str);
console.log(result); //true

    (2)  exec()  将符合规则的某个或某段字符提取出来放到数组中(始终只匹配一次),如果没有则返回null

var str = "good good study , Day dAy up";
var reg = /day/ig;
var result = reg.exec(str);
console.log(result);

输出结果: 

                

   (3)  lastIndex  返回下一次匹配时下标的开始位置(默认 0) (前提:全局匹配)

var str = "good good study , Day dAy up";
var reg = /day/ig;
console.log(reg.lastIndex);// 0
var result = reg.test(str);
console.log(result, reg.lastIndex);// true  21

var result = reg.test(str);
console.log(result, reg.lastIndex);// true  25

var result = reg.test(str);
console.log(result, reg.lastIndex);// false  0

5.  正则表达式中的字符

     (1) 字面量字符(普通字符)    

            a-z  A-Z  0-9

     (2) 元字符(特殊字符)

            1.限定符   指定正则表达式中的给定组件(某个或某段字符=> 子表达式)需要匹配多次才满足

                         *   匹配前面的子表达式出现0次或多次

                        +   匹配前面的子表达式出现1次或多次  {1,}

                        ?   匹配前面的子表达式出现0次或1次   {0,1}

                       {n}  匹配n次

                       {n,}  匹配至少n次

                       {n,m} 匹配至少n次,最多m次

            实例:

//  *   匹配前面的子表达式出现0次或多次
var str = "Mondy";
var reg = /da*y/ig; //可以匹配 dy day daay daay....
var result = reg.test(str);
console.log(result); //true

// +   匹配前面的子表达式出现1次或多次  {1,}
var str = "Mondy";
var reg = /da+y/ig; //可以匹配 day daay daay....
var result = reg.test(str);
console.log(result); //false

// ?   匹配前面的子表达式出现0次或1次   {0,1}
var str = "Mondy";
var reg = /da?y/ig; //可以匹配 dy day
var result = reg.test(str);
console.log(result); //true

//  {n}  匹配n次
var str = "Mondaaay";
var reg = /da{3}y/ig; //可以匹配 daaay
var result = reg.test(str);
console.log(result); //true

// {n,}  匹配至少n次
var str = "Mondaay";
var reg = /da{2,}y/ig; //可以匹配 daay daaay...
var result = reg.test(str);
console.log(result); //true

// {n,m} 匹配至少n次,最多m次
var str = "Mondaaay";
var reg = /da{2,3}y/ig; //可以匹配 daay daaay
var result = reg.test(str);
console.log(result); //true

            2. 定位符

                     ^  匹配字符串开始的位置  以...开头

                     $  匹配字符串结束的位置  以...结尾

    Tips:

           单独使用 ^和$ 依旧是包含关系  不会将规则定死

           同时使用 ^和$  才会在一定程度上将规则定死 

            3. 字符匹配符

                     [xyz]  字符集合,匹配xyz中的任意一个字符

                     [0123456789]    => [0-9]   匹配数字

                     [qwertyuiopasdfghjklzxcvbnm]   => [a-z]  匹配 小写字母

                     [QWERTYUIOPASDFGHJKLZXCVBNM]   => [A-Z]  匹配 大写字母

                     [0-9a-zA-Z_]  匹配数字 大小写字母 _中的任意一个

   注意在字符匹配符中 ^ 代表取反

               [^xyz]  匹配除了 xyz以外任意一个字符

               [^0-9]  匹配非数字  但是范围太大

               [^a-z]  匹配非小写  

               [^A-Z]  匹配非大写  

               [^0-9a-zA-Z_]  匹配非数字 大小写字母 _ 

          字符簇 (官方已经规定好的字符集合)

                    \d    匹配数字   [0-9]

                    \D    匹配非数字  [^0-9]

                    \w    匹配数字 大小写字母 _  [0-9a-zA-Z_]

                    \W    匹配非数字 大小写字母 _  [^0-9a-zA-Z_]

                    \s    匹配空白字符(换行符(\n)产生的空格/ 回车符(\r)产生空格 / 空格)

                    \S   匹配非空白字符 (除了空白符以外的任意字符)

                    .     匹配除换行符(\n)以外的单个字符(任意字符)

                   [\u4e00-\u9fa5]  匹配中文

           关于空白字符

                   \n   换行符 

                   \r   回车符 

                   \f   分页符

                   \t   制表符

                   \v   垂直制表符

         转义字符

Tips:   其中 \ 为转义字符,在表示某一些特殊含义的字符时,需要添加"\"转义字符,例如:要匹配+,就要写成\+

var str = "1+1";
var reg = /1+1/;
var result = reg.test(str);
console.log(result); // false

var str = "1+1";
var reg = /1\+1/;
var result = reg.test(str);
console.log(result); // true

         4.选择匹配符

                 | 可以匹配多个规则(在正则表达式中代表"或"的关系 一般配合() 使用)

                            /(red|blue|green)/   匹配red ,blue green中的任意一个

  6.综合案例

          实例1:

// 手机号验证
var phone = "17786531572";
var reg = /^1[3-9][0-9]{9}$/;
var result = reg.test(phone );
console.log(result);//true

          实例2:

// 用户名验证
var user = "aaaaa哈哈";
var reg = /^[a-zA-Z][\w$_\u4e00-\u9fa5]{5,11}$/;
var result = reg.test(user );
console.log(result); //true

           实例3:

// 邮箱验证
var email = "tigers@qq.com";
var reg = /^\w{6,18}@\w+\.(com|cn|edu)$/;
var result = reg.test(email );
console.log(result); //true

          实例4: 

// 网址验证
var str = "https://www.baidu.com";
var reg = /^(http|https):\/\/(www.)?\w{2,}\.(com|edu|cn|net)$/;
var result = reg.test(str);
console.log(result); //true

          实例5: 

// 日期判断验证
var str = "2021-1-7";
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;
var result = reg.test(str);
console.log(result); //true

          实例6: 

// QQ号判断验证
var str = "534532";
var reg = /^[1-9]\d{4,}$/;
var result = reg.test(str);
console.log(result); //true

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值