js - 正则表达式

<!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>
</head>
<body>
    <!-- 

    正则表达式
        - 检测字符串的一组规则
        - 作用1:主要用于表单验证 正则表达式.test(字符串)
        - 作用2:处理复杂的字符串 正则表达式.exec(字符串) 字符串.match(正则)

    正则表达式的声明
        1. 字面量方式:/正则表达式/标志位
        2. 构造函数方式:new RegExp('正则表达式','标志位')

    正则表达式的方法
        1. 正则表达式.test(字符串) : 检测字符串中是否包含了正则的内容,如果包含了,则返回true,否则,返回false.
        2. 正则表达式.exec(字符串) : 将字符串中匹配到正则的内容以数组的方式返回。如果没有匹配的内容,返回null

    处理正则表达式的字符串方法
        1. 字符串.match(正则) : 将字符串中匹配到正则的内容以数组的方式返回。如果没有匹配的内容,返回null
        2. 字符串.search(正则) : 与indexOf的功能相同,查找正则匹配的内容在父串中第一次出现的下标位置 ,如果没有找到,返回 -1
    
    .exec(字符串)与.match(正则)的区别
        一、exec不受g的影响,如果没有组,则只获取一个元素。如果有组,则获取一个父元素,n个子元素
        二、
        1. 无g无组,match只获取一个元素  
        2. 有g无组,match获取所有匹配的元素  
        3. 无g有组,match获取一个父元素,n个子元素 
        4. 有g有组,match获取所有的父元素。

    正则表达式的元字符(三、三、二、三个一)
        1. {}: 表示连续出现的次数
            {m} : 表示{}前面的一个或一组字符连续出现 m 次
            {m,} : 表示{}前面的一个或一组字符连续出现 m 至 无限次,至少出现m次
            {m,n} : 表示{}前面的一个或一组字符连续出现 m 至 n次。
        2. []: 表示取值范围
            [\u4e00-\u9fa5]:匹配中文字符
        3. (): 表示组
    限定符1. * : {0,}
        2. + : {1,}
        3. ? : {0,1}
        1. ^ : 写在正则表达式的开头,表示断头   ;写在[]的开头,表示取反
        2. $ : 表示断尾,限制字符串的结尾必须是指定的字符
        1. . : 表示任意一个字符(换行不算)
        2. | : 表示或,一般结合组一起使用
        3. \ : 表示转义符,将具有特殊含义的符号转为普通字符。
            \d : 表示数字 [0-9]
            \D : 表示非数字 [^0-9]
            \w : 表示字母、数字、下划线 [a-zA-Z_]
            \W : 表示 非(字母、数字、下划线)
            \s : 表示空白:空格 缩进 换行
            \S : 表示非空白
            \b : 表示单词边界
            \B : 表示非边界
            \uxxxx : 以十六进制数 xxxx 规定的 Unicode 字符。

    正则表达式的标志位
        1. g : 全局匹配,匹配出所有的匹配项,并非在发现第一个匹配项时就立即停止
        2. i : 不区分大小写字母
        3. m: 表示多行模式(multiline),可以进行多行匹配,但是只有使用^和$模式时才起作用,
                在其他模式中,加不加入m都可以进行多行匹配
     -->

    <script>
        //用户名:
        var reg = /^[\u4e00-\u9fa5]{2,}$/;
        var str = '爱新觉罗州迪';
        console.log(reg.test(str)); //true

        var pattern = /good/ig; 
        var str = 'good good study!,day day up!'; 
        alert(str.search(pattern));//0

        //或一般与组一起使用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        console.log(/^男|女$/.test('男')); //true
        console.log(/^男|女$/.test('女')); //true
        console.log(/^男|女$/.test('男男')); //true
        console.log(/^男|女$/.test('女男')); //false
        console.log(/^(男|女)$/.test('男v')); //false

        var pattern = /8(.*)8/; 
        var str = 'This is 8google8'; 
        var result = str.replace(pattern,'<strong>$1<strong>');
        document.write(result);

        var pattern = /8(.*)8/; 
        var str = 'This is 8google8, dd 8ggg8'; 
        alert(str.match(pattern)); //8google8, dd 8ggg8,google8, dd 8ggg
        alert(RegExp.$1);//google8, dd 8ggg
    </script>
    <script>
        //1. 无g无组的情况
        var reg = /do/;
        var str = 'how do you do';
        console.log(reg.exec(str));  // ['do']
        console.log(str.match(reg));  // ['do']

        // g : 标志符 表示全局匹配(从头匹配到尾)
        //2. 有g无组的情况
        var reg = /do/g;
        var str = 'how do you do';
        console.log(reg.exec(str));  // ['do']
        console.log(str.match(reg));  // ['do','do']

        //3. 无g有组的情况
        var reg = /([a-z]+) (\d+)/;
        var str = 'hao 123';
        //              第一个元素:是整个正则匹配到的内容  (父级元素)
        //              第二个元素:是第一个组()匹配到的内容  (子级元素)
        //              第三个元素:是第二个组()匹配到的内容   (子级元素)
        console.log(reg.exec(str));  // ['hao 123', 'hao', '123']
        console.log(str.match(reg));  // ['hao 123', 'hao', '123']

        //4. 有g有组的情况
        var reg = /([a-z]+) (\d+)/g;
        var str = 'hao 123,huai 456';
        //              第一个元素:是整个正则匹配到的内容  (父级元素)
        //              第二个元素:是第一个组()匹配到的内容  (子级元素)
        //              第三个元素:是第二个组()匹配到的内容   (子级元素)
        console.log(reg.exec(str));  // ['hao 123', 'hao', '123']
        console.log(str.match(reg));  // ['hao 123', 'huai 456']


        //一、exec不受g的影响,如果没有组,则只获取一个元素。如果有组,则获取一个父元素,n个子元素
        //二、
        //1. 无g无组,match只获取一个元素  
        //2. 有g无组,match获取所有匹配的元素  
        //3. 无g有组,match获取一个父元素,n个子元素 
        //4. 有g有组,match获取所有的父元素。
    </script>
</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值