1. ***String
截取子字符串
***查找关键字:
***替换
***分隔
2. *****正则表达式:
1. ***String:
截取子字符串:3种:
1. str.slice(starti,endi+1)
用法同数组的slice:
1. 含头不含尾
2. 支持负数参数
3. 省略第二个参数,表示截到结尾
2. str.substring(starti,endi+1)
特点: 1. 含头不含尾
2.省略第二个参数,表示截到结尾
不同: 不支持负数参数
如果使用倒数第n位,就用length-n
3. str.substr(starti,n)
从starti开始,截n个,不用考虑含头不含尾
***查找关键词:4种:
1. 查找一个固定的关键词的位置:
var i=str.indexOf("关键词",fromi);
在str中从fromi位置开始,找下一个"关键词"所在的位置。
返回值:
如果找到,返回关键词第一个字符的下标位置
如果没找到,返回-1
特殊: 省略fromi表示,从0位置开始。
强调: indexOf每次只找fromi只有的下*一个*关键词。
解决:用循环,反复调用indexOf
每次都将fromi改为当前位置之后
直到返回-1结束
var i=str.lastIndexOf("关键词",fromi);
在str中从fromi位置开始,找前一个"关键词"所在的位置。
返回值:同indexOf
特殊: 省略fromi表示,从length-1开始。
何时使用:只要查找一个固定的关键词的位置
问题: 无法使用模式匹配的方式查找关键词
2.判断是否包含关键词:(支持正则)
*****正则表达式:
什么是正则表达式:
描述一个字符串中,字符出现规律的规则
为什么: 可以使用模式进行模糊匹配
何时使用: 查找,替换,切割,验证
如何使用:
1.最简单的正则,就是关键词原文
2.字符集:
规定*一位*字符可用的备选字符列表
何时使用:
只要某*一位*字符,有多个备选时
如何使用:[备选字符的列表]
强调:1个字符集,默认只能匹配一位字符
简写:如果字符集中的字符,部分unicode连续,可用-省略中间的字符
比如: 1位数字:[0-9]
1位小写字母:[a-z]
1位字母:[A-Za-z]
1位汉字:[\u4e00-\u9fa5]
如果表示除了xxx之外:
[^xxx]
3.预定义字符集:
对常用字符集的简化:
1位数字: \d => [0-9]
1位字母数字或下划线: \w => [0-9A-Za-z_]
1位空字符: \s => 空格,换行,制表符
1位任意字符: . => 除回车换行外的一切
何时使用:
如果需求和预定义字符集完全匹配,才能使用。
如果需求和预定义字符集不匹配,就必须使用普通字符集
4.量词:规定一个字符集出现次数的规则
有明确数量限制:
字符集{min,max} 字符集最少出现min次,最多不能超过max次
字符集{min,} 字符集最少出现min次,多了不限!
字符集{n} 字符集必须n个
没有明确数量限制:
? 可有可无,最多1个
* 可有可无,多了不限
+ 至少1个,多了不限
5.选择和分组
选择: 或
正则1|正则2 表示只要和任意一个正则匹配,就符合规则。
分组: ()划分子表达式
何时使用:
手机号:
+86或0086 可有可无,最多1次
空字符 可有可无,多了不限
1
34578中选一个
9位数字
(\+86|0086)?\s*1[34578]\d{9}
https://regexper.com/
正课:
1.*****正则表达式
2.***String
查找关键词
替换
分隔
1. *****正则表达式:
1.关键词的原文就是最简单的正则表达式
2.字符集
3.预定义字符集
\d \w \s .
4.量词:
{min,max} {min,} {n}
? * +
5.选择和分组:
| ()
6.匹配指定位置:
^字符串开始位置:
^xxx读作"以xxx开头"或开头的xxx
强调: ^放在正则的开头,表示字符串的开始位置。
^放在字符集[]内部的开头,表示除了xxx。
$字符串结束位置
xxx$读作"以xxx结尾"或结尾的xxx
强调: 如果同时前加^,后加$,表示必须从头到尾完整匹配。——验证
如果不加^和$,只要部分匹配就验证通过
单词边界: \b 开头,结尾,空字符,标点
\b单词\b
密码强度:预判 排除法
至少包含一位大写字母以及一位数字
1. 预判: 不都是小写字母和数字组成
说明至少包含一位大写字母或其他字符
(?![a-z0-9]+$)
2. 预判: 不都是字母组成
说明至少包含一位数字或其他字符
(?![A-Za-z]+$)
3. 正则: 只能又字母和数字组成
排除了之前,其他字符的可能
[A-Za-z0-9]{8,10}
^(?![a-z0-9]+$)(?![A-Za-z]+$)[A-Za-z0-9]{8,10}$
2.***String
***查找关键词:4种
1.查找一个固定关键词的位置:
var i=str.indexOf("关键词",fromi);
var i=str.lastIndexOf("关键词",fromi);
问题: 不支持正则
2.判断是否包含和正则表达式匹配的关键词
var index=str.search(/正则/i);
在str中查找第一个和正则匹配的关键词的位置。
说明: 第二个/后+i,表示忽略大小写
不加,默认区分大小写
强调: search永远只能返回第一个关键词的位置。
不能返回关键词的内容,也无法获得之后更多的关键词。
所以,只能判断有没有。
返回值: 如果找到,返回关键词的位置
如果没找到,返回-1
问题: 永远只能找第一个且无法获得关键词的准确内容。
3.获取所有关键词的内容:
var kwords=str.match(/正则/ig);
获取str中所有和正则匹配的关键词,将所有关键词内容,保存在结果数组kwords中
说明:g 表示全部。
如果不加g,默认只查找第一个
如果没找到,返回null!
今后,都要先判断是不是null,再进一步操作。
如果不加g: 将完整关键词放在数组的第0个元素。同时为数组添加index属性,标记关键词的位置。
如果正则中包含分组,还会将每个分组匹配的子内容,分别放在数组的后续元素中。
问题: 只能获得内容,无法获得每个关键词的位置。
4. 即可获得每个关键词的内容,又可获得每个关键词的位置: reg.exec()
***替换:
str=str.replace(/正则/ig,"替换值")
将str中所有和正则匹配的关键词都替换为"替换值",将生成的新字符串,再存回str中
高级替换:
str=str.replace(/正则/ig,
function(kword){
return "替换值";
}
);
依次找到str中每个和正则匹配的关键词,传给函数的kword参数。函数内根据本次找到的关键词,计算出不同的替换值。replace会将函数返回的替换值,替换到字符串。
如果需要部分替换关键词:
1.将正则表达式分组:
2.从函数的第二个参数开始,依次获得每次匹配的关键词的分组内容。
str=str.replace(/正则/ig,
function(kword,$1,$2,...){
return "替换值";
}
);
衍生: 删除: 其实就是将关键词替换成""
格式化: 2步:
1.用正则将要格式化的字符串分组
2.在replace的第二个参数中,用$n代替第n个分组的子内容,拼接格式。
分隔: 将str按照指定的分隔符,分割为多个子字符串。
var subs=str.split("分隔符");
str.split(/正则/);
固定套路:
1.将字符串打散为字符数组:
var chars=str.split("");
2.按指定字符分隔:
var subs=str.split("分隔符");
3.将页面元素的内容,转化为数组