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); }
}