<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        div{
            text-align: center;
        }
    </style>
</head>
<body>
<div>
    <h1 >正则表达式的创建</h1>
    <p>请按F12查看结果</p>
</div>

<!--
用途:
1.模式验证:检测手机号、身份证号等是否符合规范
2.匹配读取:将满足规则的部分读取出来,如邮箱地址
3.匹配替换:将满足规则的部分替换为指定字符串
只能匹配第一个满足的字符串
原字符串并没有变化,只是返回了一个新字符串
语法:
1.创建对象
(1)对象形式:var reg = new RegExp("正则表达式")当正则表达式中有"/"那么就使用这种
(2)直接量形式:var reg = /正则表达式/一般是这种方式

-->

 

<!--模式验证-->
    <script>
        // 创建一个最简单的正则表达式对象
        var reg = /o/;
        var reg1 = /Love/;        // 创建一个字符串对象作为目标字符串
        var str = 'Hello World!';
        var str2 = 'I Love ZWJ!';
        console.log("我喜欢你:"+reg1.test(str2));        // 调用正则表达式对象的test()方法验证目标字符串是否满足我们指定的这个模式,返回结果true
        console.log("字符串中是否包含'o'="+reg.test(str));
    </script>    <!--匹配读取-->
    <script>


// 在目标字符串中查找匹配的字符,返回匹配结果组成的数组
/*
match() 方法将检索字符串 String Object,
以找到一个或多个与 regexp 匹配的文本。
这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。
如果 regexp 没有标志 g,
那么 match() 方法就只能在 stringObject 中执行一次匹配。
如果没有找到任何匹配的文本, match() 将返回 null。
否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息

*/
        var resultArr = str.match(reg);
        // 数组长度为1
        console.log("resultArr.length="+resultArr.length);
        // 数组内容是o
        console.log("resultArr[0]="+resultArr[0]);
    </script>    <!--匹配替换-->
    <script>
        var newStr = str.replace(reg,'@');
        // 只有第一个o被替换了,说明我们这个正则表达式只能匹配第一个满足的字符串
        console.log("str.replace(reg)="+newStr);//Hell@ World!
        // 原字符串并没有变化,只是返回了一个新字符串
        console.log("str="+str);//str=Hello World!
    </script>

<!--全文查找:
如果不使用g对正则表达式对象进行修饰,
则使用正则表达式进行查找时,仅返回第一个匹配;
使用g后,返回所有匹配-->

<script>
        // 目标字符串
        var targetStr = 'Hello World!';        // 没有使用全局匹配的正则表达式
        var reg = /[A-Z]/;        // 使用了全局匹配的正则表达式
        //var reg = /[A-Z]/g;        // 获取全部匹配
        var resultArr = targetStr.match(reg);
        // 数组长度为1
        console.log("resultArr.length="+resultArr.length);        // 遍历数组,发现只能得到'H'
        for(var i = 0; i < resultArr.length; i++){
            console.log("resultArr["+i+"]="+resultArr[i]);
        }
    </script>    <!--忽略大小写-->
    <script>
        //目标字符串
        var targetStr = 'Hello WORLD!';        //没有使用忽略大小写的正则表达式
        var reg = /o/g;
        //获取全部匹配
        var resultArr = targetStr.match(reg);
        //数组长度为1
        console.log("resultArr.length="+resultArr.length);
        //遍历数组,仅得到'o'
        for(var i = 0; i < resultArr.length; i++){
            console.log("resultArr["+i+"]="+resultArr[i]);
        }
    </script>
    <script>
        //目标字符串
        var targetStr = 'Hello WORLD!';        //使用了忽略大小写的正则表达式
        var reg = /o/gi;
        //获取全部匹配
        var resultArr = targetStr.match(reg);
        //数组长度为2
        console.log("resultArr.length="+resultArr.length);
        //遍历数组,得到'o'和'O'
        for(var i = 0; i < resultArr.length; i++){
            console.log("resultArr["+i+"]="+resultArr[i]);
        }
    </script>    <!--多行查找 不使用多行查找模式,目标字符串中不管有没有换行符都会被当作一行。-->
    <script>
        //目标字符串1
        var targetStr01 = 'Hello\nWorld!';
        //目标字符串2
        var targetStr02 = 'Hello';        //匹配以'Hello'结尾的正则表达式,使用了多行匹配
        var reg = /Hello$/m;
        console.log(reg.test(targetStr01));//true        console.log(reg.test(targetStr02));//true
    </script>    <!--元字符


被赋予特殊含义的字符 不能被直接当做普通字符使用。
如果要匹配元字符本身,需要对元字符进行转义,
转义的方式是在元字符前面加上“\”,例如:\^
-->

<script>
        var str = 'one two three four';
        // 匹配全部空格
        var reg = /\s/g;
        // 将空格替换为@
        var newStr = str.replace(reg,'@'); // one@two@three@four
        console.log("newStr="+newStr);
    </script>
    <script>
        var str = '今年是2014年';
        // 匹配至少一个数字
        //匹配加号(+)之前的正则表达式1次或多次。
        var reg = /\d+/g;
        str = str.replace(reg,'abcd');
        console.log('str='+str); // 今年是abcd年
    </script>
    <script>
        var str01 = 'I love Java';
        var str02 = 'Java love me';
        // 匹配以Java开头
        var reg = /^Java/g;
        console.log('reg.test(str01)='+reg.test(str01)); // flase
        console.log("<br />");
        console.log('reg.test(str02)='+reg.test(str02)); // true
    </script>
    <script>
        var str01 = 'I love Java';
        var str02 = 'Java love me';
        // 匹配以Java结尾
        var reg = /Java$/g;
        console.log('reg.test(str01)='+reg.test(str01)); // true
        console.log("<br />");
        console.log('reg.test(str02)='+reg.test(str02)); // flase
    </script>
    <!--    字符集合-->
    <script>
        var str01 = 'Hello World';
        var str02 = 'I am Tom';
        //匹配abc中的任何一个
        var reg = /[abc]/g;
        console.log('reg.test(str01)='+reg.test(str01));//flase
        console.log('reg.test(str02)='+reg.test(str02));//true
    </script>
    <!--    出现次数 {n} 出现n次 {n,m} 出现n到m次-->
    <script>
        console.log("/[a]{3}/.test('aa')="+/[a]{3}/g.test('aa')); // flase
        console.log("/[a]{3}/.test('aaa')="+/[a]{3}/g.test('aaa')); // true
        console.log("/[a]{3}/.test('aaaa')="+/[a]{3}/g.test('aaaa')); // true
    </script>
    <!--  在正则表达式中表达『或者』使用符号:| -->
    <script>
        // 目标字符串
        var str01 = 'Hello World!';
        var str02 = 'I love Java';
        // 匹配'World'或'Java'
        var reg = /World|Java/g;
        console.log("str01.match(reg)[0]="+str01.match(reg)[0]);//World
        console.log("str02.match(reg)[0]="+str02.match(reg)[0]);//Java
    </script>

<!-- 常用的
需求 正则表达式
用户名 /^\[a-zA-Z\_][a-zA-Z_\-0-9]{5,9}$/
密码 /^[a-zA-Z0-9_\-\@\#\&\*]{6,12}$/
前后空格 /^\s+\|\s+$/g
电子邮箱 /^[a-zA-Z0-9_\.-]+@([a-zA-Z0-9-]+[\.]{1})+[a-zA-Z]+$/

-->

</body>
</html>