Day7:字符串的使用、正则表达式

定义:就是ECMAScript标准中已经定义好的,由浏览器厂商已经实现的标准对象
内置对象列表:
String
Boolean
Number
Array
Date
Math
Error
Function
Object
Global
js的内置对象
定义:专门封装原始类型的数据,并提供对数据常用操作的内置类型
为什么要用:让原始类型的数据也可以像引用类型一样,拥有方法和属性
包装类型有:
String类型
Number类型
Boolean类型
何时使用包装类型:只要用原始类型的数据调用方法或访问属性时,js引擎都会自动创建对应的包装类型对象,方法调用完,包装类型对象自动释放
eg1:
var num=5.678;//原始类型
//num=new Number(num);//包装类型
console.log(num.toFixed(2));
//num=null;//释放包装类型对象
View Code

测试正则表达式工具:RegexBuddy 4

一、String

1、创建字符串:

(1)var str="";//原始类型

(2)var strObj=new String(" ")//包装类型对象

(3)var str=String(" ");//原始类型,把其他的类型做一个转换

注:

是否为对象就看有没有new

直接量:直接可以看到的值

2、转义字符:

(1)代替字符串中的非打印字符:\n    \t

(2)如果字符串内容中包含和语法冲突的特殊字符,可用\转为普通字符

eg:console.log("\tjs是互联网\"第一大语言\"");

3、字符串内容一旦创建不可改变

(1)如果修改,都要创建新的字符串,保存新结果,替换旧字符串

var str="Hello";
//var StrObj=new String(str);
str=str.toUpperCase();
//strObj=null;
console.log(str);
View Code

(2)**规律:所有字符串API,都需要变量接收返回值**

二、字符串的使用

注:字符串类型底层其实都是用字符数组实现的

1、str.length:字符串的字符个数属性

2、大小写转换:大小写字母一视同仁时,先转换,再处理,比如:重名验证、重复邮箱

(1)toLowerCase():转小写

(2)toUpperCase():转大写

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        var code="5AsD";
        var input="";
        while((input=prompt("请输入验证码:"+code).toLowerCase())!=code.toLowerCase()){
            alert("验证码错误");
        }
        document.write("登录成功");
    </script>
    </body>
</html>
View Code

3、var char=str.charAt(index):获取指定位置字符

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        var pid="110102198006282151";
        //提取倒数第二位的字符
        var char=pid.charAt(pid.length-2);
        console.log(char%2==0?"女":"男");
    </script>
    </body>
</html>
View Code

4、var num=str.charCodeAt(index):获取指定位置字符的unicode编号

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        var input=prompt("输入消息:");
        var result=[];
        for(var i=0;i<input.length;i++){
            result.push(input.charCodeAt(i));
        }
        //优化:
        //频繁对字符串+=,要用数组代替
        //每个字符放入数组
        //join("")拼接数组元素
        document.write(result.join(""));
    </script>
    </body>
</html>
View Code
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        //将转换后不足5位的补全成5位
        var input=prompt("输入消息:");
        var result=[];
        for(var i=0;i<input.length;i++){
            var num=input.charCodeAt(i);
            if(num<10000){//只要不足5位都要补齐
                var arr=[0,0,0,0,0];
                var code=num+"";//将num转为string,这种从性能上来说效率高
                var start=5-code.length;
                for(var n=0;n<code.length;n++,start++){
                    arr[start]=code[n];
                }
                num=arr.join("");
            }
            result.push(num);
        }
        document.write(input+"<br/>");
        document.write(result.join(""));
    </script>
    </body>
</html>
View Code

上题优化:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        //将转换后不足5位的补全成5位
        var input=prompt("输入消息:");
        var result=[];
        for(var i=0;i<input.length;i++){
            var num=input.charCodeAt(i);
            if(num<10000){//只要不足5位都要补齐
                num=num+10000+"";
                num="0"+num.slice(1);
            }
            result.push(num);
        }
        document.write(input+"<br/>");
        document.write(result.join(""));
    </script>
    </body>
</html>
View Code

5、检索字符串

(1)查找关键字:var index=str.indexOf("关键字",from);//返回关键字所在位置,如果没找到,返回-1,只找第一个关键字位置,默认只能从位置0开始,from为从from开始向后查找

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        //查找所有关键字的位置
        var str="女神说要来,我草草的收拾了房间,结果她又说不来了,我说我草";
        /**
        var index=str.indexOf("我草");
        document.write(index+"<br/>");
        index=str.indexOf("我草",index+1);
        document.write(index);**/
        var index=-1;
        while((index=str.indexOf("我草",index+1))!=-1){
            document.write(index+"<br/>");
        }
    </script>
    </body>
</html>
View Code

var index.str.lastIndexOf("关键字",from);:从最后一个字符,向前找,只要关键字离结尾近,就用这个,from为从from开始向前查找,返回值同上,因为字符在数组中的下标是固定的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        //查找所有关键字的位置
        var str="女神说要来,我草草的收拾了房间,结果她又说不来了,我说我草";
        /**
        var index=str.indexOf("我草");
        document.write(index+"<br/>");
        index=str.indexOf("我草",index+1);
        document.write(index);**/
        var index=str.length;
        while((index=str.lastIndexOf("我草",index-1))!=-1){
            document.write(index+"<br/>");
        }
    </script>
    </body>
</html>
View Code

(2)替换关键字:

(3)获取子字符串:var subStr=str.slice(start,end+1);

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <script>
        var pid="110102198006282151";
        var birth=pid.slice(6,6+8);
        //相当于:var birth=pid.slice(-4-8,-4);
        console.log(birth);
    </script>
    </body>
</html>
View Code

var subStr=str.substring(start,end+1);和slice一样,唯一区别就是他不支持负数作为参数

var subStr=str.substr(start,count);

以上3个方法省略第二个参数默认都是取到结尾

6、将编码后的的字符进行解码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            var input=prompt("粘贴编码");
            var arr=[];
            //每次取5个字符,翻译为一个字符
            for(var i=0;i<input.length;i+=5){
                var code=input.substring(i,i+5);
                arr.push(String.fromCharCode(code));
            }
            var str=arr.join("");
            document.write(str);
        </script>
    </head>
    <body>
        
    </body>
</html>
View Code

7、分隔字符串

按规律分隔字符串:var subs=str.split("分隔符"[,count])  返回切割后的数组

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            //将每个单词首字符转换为大写
            var str="no zuo no die";
            var words=str.split(" ");
            for(var i=0;i<words.length;i++){
                words[i]=words[i][0].toUpperCase()+words[i].substring(1);
            }
            str=words.join(" ");
            document.write(str);
        </script>
    </head>
    <body>
        
    </body>
</html>
View Code
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            //计算一个字符串中,中文、英文、数字、其他字符的个数
            //判断字符的种类,使用unicode的范围:
            //48-57:数字字符0-9
            //65-90:大写字母A-Z
            //97-122:小写字母a-z
            //19968-40869:汉字
            //注:unicode包括ASCII
            var engCount=0;
            var numCount=0;
            var chsCount=0;
            var other=0;
            var str="选购AppleCare+,延保2年";
            for(var i=0;i<str.length;i++){
                var num=str.charCodeAt(i);
                if(num>=19968&&num<=40869){
                    chsCount++;
                }else if((num>=65&&num<=90)||(num>=97&&num<=122)){
                    engCount++;
                }else if(num>=48&&num<=57){
                    numCount++;
                }else{
                    other++;
                }
            }
            document.write('中文'+chsCount+'英文'+engCount+'数字'+numCount+'其他'+other);
        </script>
    </head>
    <body>
        
    </body>
</html>
View Code

8、模式匹配:可以设置查找或者替换的规则

何时使用模式匹配:要查找的关键字可能发生有规律的变化

如何使用模式匹配:

(1)定义模式:/关键字/模式

(2)按模式替换关键字:var str=str.replace(reg,"新值");

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            var str="No zuo no die";
            //定义模式,即使是字符串两个斜线之间也不能加双引号
            var reg=/no/ig;//忽略大小写  g全局进行查找,所有都替换  i忽略大小写,专门给英文用,因为中文不区分大小写呀!
            str=str.replace(reg,"**");//默认仅替换第一个关键字,要想全局替换,要在模式用定义g
            document.write(str);
        </script>
    </head>
    <body>
        
    </body>
</html>
View Code

9、获得所有关键字的内容:var kwords=str.match(reg);//返回数组,只能获得关键字的内容,无法确定每个关键字的位置

kwords.length:找到的关键字的个数,如果没有找到就返回null

注:只要有可能返回null就要先判断不等于null,再处理,否则,你的程序就会报错了,注意注意了,null.length你觉得它对吗??????

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            var str="No zuo no die";
            //定义模式,即使是字符串两个斜线之间也不能加双引号
            var reg=/no/ig;//忽略大小写  g全局进行查找,所有都替换  
            var kwords=str.match(reg);
            if(kwords!=null){
                document.write(kwords+"共替换了:"+kwords.length);
            }
        </script>
    </head>
    <body>
        
    </body>
</html>
View Code

10、和indexOf完全相同的查找:var index=str.search(reg)(了解就好)

indexOf不支持模式查找,search其实是indxOf的模式查找版

三、正则表达式(重点)

定义:一个字符串中字符出现的规律

何时使用正则表达式?:验证字符串格式,查找关键字,替换关键字

比如:银行卡查询密码一般都是6位数字、用户名必须是字母数字下划线的组合

1、选择符号:[所有备选字符]必须多选一使用,一个[]只能代表1位字符的规则

[^xx]表示除了xx都行,必须放在中括号的第一个

2、横线符号(-):表示字符的范围,备选字符连续的范围!

比如:[1-9][a-z][A-Z][a-zA-Z]//可以局部使用

汉字的范围:[\u4e00-\u9fa5]

3、预定义字符集:使用简化的字符来定义常用字符集

比如:[0-9]---------->\d

[a-zA-Z0-9_]------------>\w

空字符---------->\s:代表一切看不到的字符,它只能代表一个,一个制表符也算一个空字符

.:任意一个字符

注:如果规则正文中出现特殊符号,用\转为原文

4、数量词:规定前边一个字符出现次数的两次

语法:{min,max}

{num}:固定长度

{min,}:至少min个,多了不限

手机号:\+86\s1[3578]\d{9}

posted @ 2017-07-20 10:42  licy_python  阅读(172)  评论(0)    收藏  举报