1、.length----获取字符串长度;

var myString="JavaScript";
console.log(myString.length);  //10

2、concat----连接字符串生成新的字符串

var s1="a";
var s2="b";
var s3="c";
console.log(s1.concat(s2,s3));  //abc
console.log(s1)  //a

3、indexOf(str,fromIndex)----找到匹配项返回索引值,如果没找到返回-1;
常用方法:

var myString="JavaScript";
console.log(myString.indexOf("v"));  //2
console.log(myString.indexOf("Script"));  //4
console.log(myString.indexOf("key"));  //-1

4、charAt(index)----返回指定索引位置的字符,若索引越界,返回空字符串;

myString="JavaScript";
console.log(myString.charAt(1));  //a
console.log(myString.charAt(10000000000000000));  //若索引越界,返回空字符串  -- ""
console.log(myString.charAt(-1));  //若索引越界,返回空字符串  -- ""
5、substr(fromIndex,length)----从起始索引fromIndex开始截取长度length的字符串,获取的字符串包含索引值的开始位置的值,如果length长度不指定或者超过可截取的最大长度,则截取到结尾,如果起始索引fromIndex为负,则从右往左截取,-1表示倒数第一个;
myString="JavaScript";
console.log(myString.substr(1,1));  //a  
console.log(myString.substr(1,2));  //av
console.log(myString.substr(1));  //avaScript(从下标为一的元素开始查找直到结束)
console.log(myString.substr(1,4000000));  //avaScript
console.log(myString.substr(-1,1));  //t(从myString.length-1处开始查找一个元素) 
console.log(myString.substr(-2,1));  //p (从myString.length-2处开始查找一个元素)
console.log(myString.substr(-6,2));  //Sc (从myString.length-6处开始查找2个元素)
console.log(myString.substr(-6,6));  //Script

7.slice()----截取 startIndex处的字符,不包含endIndex处的字符,基本用法和数组的slice用法一样;


myString="JavaScript";
console.log(myString.slice(1,3))   //av
如果startIndex > endIndex,则执行方法时返回空字符串
如果 start 为负,将它作为 length + start处理,此处 length 为数组的长度;
console.log(myString.slice(-1,3))    //返回空
如果 end 为负,就将它作为 length + end 处理,此处 length 为数组的长度;
console.log(myString.slice(2,-3))   //vaScr

8.运用string对象来进行查找

 

1、indexOf(str,fromIndex)----找到匹配项返回索引值,如果没找到返回-1;
常用方法:

var myString="JavaScript";
console.log(myString.indexOf("v"));  //2
console.log(myString.indexOf("Script"));  //4
console.log(myString.indexOf("key"));  //-1
2.判断字符串中是否包含符合正则的敏感词
            // var i = str.search(/正则/i)  i表示忽略大小写    在str中找到第一个符合正则表达式要求的关键字的位置
            //返回值:找到了返回关键词的下标,如果没有找到返回-1
            /*var str=prompt("正在输入消息.....");
            var i = str.search(/(微|w(ei)?)\s*(信|xin|x)/);
            console.log(i==-1?"发送成功":"发现敏感词,不能发送!");*/
            var str="No zuo no die No can no say";
            var i =str.search(/n/i);
            console.log(i);
        3. 使用正则表达式查询指定的一类关键词
            //var arr = str.match(/正则/ig)  查找str中所有符合正则表达式要求的关键词,保存在一个数组中返回
                //默认只找第一个,找到所有需要必须加上g
                //返回值:所有铭感次组成数组,没有找到返回null
            var arr = str.match(/we/gi);
            console.log(String(arr));
            //强调:如果一个api有可能返回null,就必须先做判断,不等null时在使用

 

9、split()----字符串分割成数组,返回新数组,不影响原字符串;

 


var s="a,bc,d";
console.log(s.split(","));  //["a", "bc", "d"]
s="a1b1c1d1";
console.log(s.split("1"));  //["a", "b", "c", "d", ""]

10.RegExp 是正则表达式的缩写。

当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。

简单的模式可以是一个单独的字符。

更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。

您可以规定字符串中的检索位置,以及要检索的字符类型,等等。

11.、创建一个正则表达式节

你可以使用以下两种方法之一构建一个正则表达式:

使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示:

/*
   /pattern/flags
*/

const regex = /ab+c/;

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

在加载脚本后,正则表达式字面值提供正则表达式的编译。当正则表达式保持不变时,使用此方法可获得更好的性能。

或者调用RepExp对象的构造函数,如下所示:

/* 
    new RegExp(pattern [, flags])
*/

let regex = new RegExp("ab+c");

let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");

let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");


            正则表达式是严格区分大小写的
            i    加上去以后,让正则表达式对大小写不敏感,    不常用
            g    全局匹配    找到了以后还会继续的去找,没有找到就一直找
            m    执行多行匹配

(1).正则表达式表达式:[](一个方括号表示匹配一个字符)

 

             [abc123]   匹配abc123任意一个字符
             [a-z]      匹配a-z之间的任意字符,可以表示一个范围,中间用-连接
             [0-9]      匹配1-9之间的任意一个数
             [A-z]      按照ascii编码来排序的,A-Z a-z的任意字符

 

(2).特殊字符

            \n 查找换行符。
            \f 查找换页符。
            \r 查找回车符。
            \t 查找制表符。
            \v 查找垂直制表符。

(3).元字符

. 查找单个字符,除了换行和行结束符。 
                . === [^\n\r]
            \w 查找单词字符。 
                \w === [A-Za-z0-9_]
            \W 查找非单词字符。 
                \W === [^\w]
            \d 查找数字。 
                \d === [0-9]
            \D 查找非数字字符。 
                \D === [^\d]
            \s 查找空白字符。 
                \s === [\t\n\r\v\f]
            \S 查找非空白字符。 
                \S === [^\s]

(4).修饰类

    \b 匹配单词边界。

    \B 匹配非单词边界。

            var str = "thIsis boy";
            var reg = /\Bis\B/ig;     //修饰字符不占文本内容
            console.log(str.match(reg));

  n$ 匹配任何结尾为 n 的字符串。

  

var str = "abcabc";
                var reg = /abc$/g;
                console.log(str.match(reg));

 


  ^n 匹配任何开头为 n 的字符串。

  

var str = "Abcabc";
                var reg = /^abc/ig;
                console.log(str.match(reg));

 

 

 

(5).量词

            n{X} 匹配包含 X 个 n 的序列的字符串。 
                var str = "aaaaaaaaaaaaaaaabc";
                var reg = /a{5}/g;
                console.log(str.match(reg));{aaaaa,aaaaa,aaaaa,aaaaa}
            n{X,Y} 匹配包含 X 至 Y 个 n 的序列的字符串。
                正则表达式默认的是贪婪模式,按照最多的进行匹配
                var str = "aaaaaaaaaaaaaaaaabc";
                var reg = /a{1,3}?/g;   //后面加上问好表示非贪婪模式,按照最少的进行匹配
                console.log(str.match(reg));
            n{X,} 匹配包含至少 X 个 n 的序列的字符串。
                var str = "aaaaaaaaaaaaaaaaabc";
                var reg = /[ab]{1,}/g;    //最少匹配一个 
                console.log(str.match(reg));

            n+ 匹配任何包含至少一个 n 的字符串。 
                +{1,}
                var str = "aaaaaaaaaaaaaaaaabc";
                var reg = /[ab]+/g;    //最少匹配一个 
                console.log(str.match(reg));
            n* 匹配任何包含零个或多个 n 的字符串。 
                *{0,}
            n? 匹配任何包含零个或一个 n 的字符串。
                ?{0,1}

(6).属性

global   是否具有标志 g。
            ignoreCase   是否具有标志 i。 
            lastIndex 一个整数,标示开始下一次匹配的字符位置 。      游标,可以获取可以赋值
            multiline 具有标志 m。
            source  正则表达式的源文本。 
            var str = "abcabcabc";
            var reg = /[A-Z]/im;
            console.log(reg.source)

 

 

 

 

 

12.RegExp对象 

 

//RegExp对象
        //1、what:封装一条正则表达式,提供了使用正则表达式进行查找和验证的API
        //2.when  查找关键词的第四种情况:即查内容,又查位置
                    // 利用正则表达式进行验证
        //3.how:
            //创建 直接量的创建  已知规则
            var reg=/no/g;//   所有与的/在正则中都要加上\/才能转义为/
            console.log(typeof reg);//object  对象
            //动态创建正则
            // var reg1=new RegExp(/正则/,"gi");
            var str = "床前明月光,一行白鹭上青天,日照香炉生紫烟,飞流直下三千尺";
            var names=['明月','白鹭','飞流','紫烟',"青天"];
            var nameReg = new RegExp(names.join("|"),"g");
            var kws = str.match(nameReg);
            console.log(kws);

 

4.查找关键词:第四种情况  即知道找位置又找具体内容
        //var arr = reg.exec(带查找的完整字符串)
            /*
                返回值:本次找到的一个关键词及位置
                    arr[0]:关键词的内容    如果正则中有分组    arr[n]:自动保存在第n个分组匹配的子内容
                    arr[index]:当前关键词位置  -- > arr.index 如果没有找到返回null
                    每次查找后,都将reg.lastIndex属性(下一次开始位置)修改为当前index+关键词长度,相当于跳过了当前关键词继续向后找

 

//5.检查字符串是是否完全满足正则表达式的要求!
            //var bool = reg.test(待检测字符串)
            //只要是验证,reg中必须前加^ 后加$   要求冲头到位,都必须完整匹配
            //ex:输入六位数的密码  知道输入域正确为止(练习)
            var reg=/^\d{6}$/;
            var input=prompt("请输入六位数字密码");

            var bool=reg.test(input);
            console.log(bool);

 

例题:API(str.match/replace

//替换:将字符串中所有敏感(符合正则表达式规则)词替换为新内容
            //基本替换  str = str.replace(/正则/ig,'替换值');  替换以后返回一个新的字符串
        var str="No zuo no die No can no say";
        // no---bu
        var kwr = str.match(/no/gi);
        var newStr = str.replace(/no/gi,'bu');
        console.log(newStr);
        console.log('共替换'+kwr.length+"处");
        //yes ---***
        var reg=/yes/gi;
        kwr=str.match(reg);
        var unStr=str.replace(reg, "***");
        console.log(unStr);
        console.log(kwr==null?"没有找到匹配的关键词":"替换"+kwr.length+"处")
    //衍生操作:删除,将找到的字符串替换成空字符
        str = str.replace(/葡萄/g,"");
        console.log(str)
        //格式化:将原字符串的关键词按照指定格式重新组合
            /*
                step1:用正则将元字符串中的内容分组
                step2:用replace按新格式重新组合各个分组的内容
                ex:"19950415"--->1995年04月15日
                    birth.replace(/(\d{4})(\d{2})(\d{2})/g,"$1年$2月$3日")
                其中$n可以获得第n个()分组对应的子字符组

 作业2 :对信息进行加密   "520 1314"  "今晚八点,不见不散"
             charCodeAt  String.fromCharCode sub()  slice() substr()
                定义一个函数加密规则:每字符串都转化为unicode码   ---保证每一个unicode码都是五给字符 不够5个字符的地方用0补上  
                定义一个函数解密:通过unicode码 转换为字符

 

var msg = "今晚8点,老地方不见不散,w84u"
        function encode(msg){
            for(var i=0,code="";i<msg.length;i++){
                //将msg中当前字符转换为unicode,拼接到code上
                // code+=msg[i].charCodeAt();
                var u= msg.charCodeAt(i);
                //加密的unicode码都变成五位数
                /*if(u<100){
                    u="000"+u;
                }else if(u<1000){
                    u="00"+u;
                }*/
                //(u+100000+"").slice(1)
                //52+100000=100052    
                //20170+100000=120170   .slice(1)   =20170
                            //     012345
                code += (u+100000+"").slice(1);
                
            }

            return code;
        }
        var code = encode(msg);
        console.log(code);

        function decode(code){
            //声明空字符 str
            var str="";
            //
            return str;
        }

        var receive = decode(code);//对加密的信息解密
        console.log(receive);//输出解密之后的结果

 

作业3:对名字排序:

 

<button onclick="nameSort()">对名字排序</button>
    <ul id="ulNames">
        <li>tom</li>
        <li>rose</li>
        <li>jim</li>
        <li>smith</li>
        <li>jerry</li>
        <li>Ary</li>
        <li>lucy</li>
    </ul>
    <script>
        function nameSort(){
            //获取ulNames的innerHTML
            var html = document.getElementById("ulNames").innerHTML;
            //删除html开头的空字符<li>和结尾的</li>空字符
            html=html.replace(/^\s*<li>|<\/li>\s*$/g,'');
            //将html按</li>空字符<li>切割保存为names数组中
            var names = html.split(/<\/li>\s*<li>/);
            //将数组中的名字排序
            names.sort();
            //拼接成 html代码
            html="<li>"+names.join("</li><li>")+"</li>";
            //将拼接好的html写到ulNames中去
            ulNames.innerHTML=html;
        }
        
        ulNames.innerHTML="<li>"+
                (
                    ulNames.replace(/^\s*<li>|<\/li>\s*$/g,'')
                    .split(/<\/li>\s*<li>/)
                    .sort()
                    .join("</li><li>")
                )
                +"</li>";

 

 作业4:生成随机数:

 

//随机六个不重复的数字  范围在 1~33之间
        function getRond(){
            //定义空数组  nums
            var nums = [];
            //反复:生成随机数  只要nums.length<6
            while(nums.length<6){
                //重复生成随机1~33之间的随机数
                var r = Math.floor(Math.random()*33+1);
                //判断r当前的值是否在nums中已经存在了
                for(var i=0;i<nums.length;i++){
                    if(nums[i]==r){//如果当前元素和r相等,退出循环
                        break;
                    }
                }
                if(i==nums.length){//如果nums中不包含r,就将r加入nums数组
                    nums.push(r)
                }
            }
            console.log(nums);

        }

 

 



        }