1. ***String
什么是:
***内置对象:
***包装类型:
字符串API
1. 什么是: 多个字符组成的只读字符数组
vs 数组: 下标i
length
slice() concat
不同: 数组中凡是直接修改原数组的API,字符串都不能用!
2. 内置对象: ES标准中规定的,浏览器厂商已经实现的现成的对象和API
11个: Number String Boolean
Array Date RegExp Math
Error
Function Object
Global(浏览器中被替换为window)
3. 包装类型对象:
什么是: 专门封装基础类型的值,并提供操作基础类型值的API的对象
为什么: 基础类型的值,本身不包含任何API功能
何时: 只要试图对基础类型的值调用API时,都会自动创建对应类型的包装类型对象来封装基础类型的值。
调用后: 包装类型对象,自动释放!
比如: var n=345.678;
n.toFixed(2)=>345.678.toFixed(2)
=>new Number(345.678).toFixed(2)
4. String的API:
***所有字符串API都无权修改原字符串,只能返回新字符串!
大小写转换: 将字符串中所有英文字母转为统一的大小写
何时: 只要不区分大小写时,都要先转为一致的大小写,再判断。 比如: 用户名,邮箱地址,验证码
如何: str.toUpperCase() //都转大写
str.toLowerCase() //都转小写
获得指定位置的字符: str[i]
var char=str.charAt(i);
获得指定字符的unicode号:
var unicode=str.charCodeAt(i); //省略i,默认是0
将unicode号反向转回文字
var char=String.fromCharCode(unicode);
选取子字符串: str.slice(starti,endi+1)
str.substring(starti,endi+1) 不支持负数参数
str.substr(starti,n): 选取starti开始的n个元素
1. ***String API
查找关键词
替换
切割字符串
2. *****正则表达式
1. 查找关键词: 4种
1. 查找一个固定的关键词出现的位置:
var i=str.indexOf("关键词",fromi)
在str中,从fromi位置开始查找"关键词"的位置
如果找到,返回关键词所在位置的下标
找不到,返回-1
简写: 省略fromi,默认从0开始
专门找最后一个关键词的位置:
var i=str.lastIndexOf("关键词")
在str中,找最后一个关键词出现的位置
问题: 只能找第一个关键词
解决: 正则表达式:
2. 使用正则表达式查找指定的一类关键词的位置:
按模式匹配:
var i=str.search(/正则表达式/);
在str中查找第一个符合正则表达式要求的关键词的位置
返回值: 找到的关键词的下标, 如果找不到返回-1
何时: 仅判断是否包含敏感词时,就用search
如果返回不是-1,说明包含,否则说明没找到
忽略大小写: /正则/i
问题: 1. 只能获得第一个的位置,不能获得所有敏感词
2. 只能返回位置,不能返回内容
3. 使用正则表达式查找指定的一类关键词的内容:
var arr=str.match(/正则/ig);
默认只找第一个,找所有,必须加g
返回值: 所有敏感词组成的数组
没找到返回null!
强调: 如果一个API有可能返回null,就必须先判断不是null,再使用!
arr.length 表示找到的关键词个数
问题: 仅返回所有关键词的内容,无法返回每个关键词位置
4. 即找所有关键词内容,又找每个关键词的位置?
reg.exec();
2. 替换: 将字符串中所有敏感词替换为新内容
基本替换:
str=str.replace(/正则/ig,“替换值”);
4. *****正则表达式:
什么是: 专门定义一类字符串统一规则的表达式
何时: 1. 按照指定规则模糊查找一类关键词时
2. 表单中验证输入项的格式
如何: 语法:
1. 最简单的正则其实就是关键词原文
2. 字符集: 规定字符串中一位字符可用的备选字符列表
何时: 只要某一位字符,有多个备选字时
如何: [备选字符列表]
强调: 一个字符集只能匹配一位字符
简写: 如果备选字符列表是连续的,就可用-省略中间字符
一位字母: [a-zA-Z]
一位数字: [0-9]
一位汉字: [\u4e00-\u9fa5]
特殊: 除了: [^排除的字符列表]
强调: ^必须写在[开头]
3. 预定义字符集: 4个:
\w 一位字母数字或_ =>[a-zA-Z0-9_]
\d 一位数字 => [0-9]
\s 一位空字符: 空格,Tab,...
. 一位任意字符
强调: 一个预定义字符集仅匹配一位字符
只有规则和预定义字符完全一致时,才能使用
如果不一致, 依然需要手写普通字符集
字符集仅控制每个字符的内容
4. 量词: 专门固定字符出现的次数
有明确数量边界:
字符集{min,max} 规定字符集必须最少出现min次
最多max次
字符集{min,} 最少min次, 多了不限
字符集{n} 必须n次
没有明确数量边界:
字符集? 可有可无,最多一次
字符集* 可有可无,多了不限
字符集+ {1,}
强调: 仅修改相邻的前一个字符集
5. 选择和分组:
分组: 将多个字符集分成一组:
何时: 如果希望一个量词同时修饰多个字符集时
比如: 我(了个?)?去: 我去 我了去 我了个去 我个去X
regexper.com
选择: 其实就是"或" 规则1|规则2
只要匹配任意一个规则即可
(微|w(ei)?)\s*(信|x(in)?)
手机号:
(\+86|0086)? +86或0086 可有可无,最多一次
\s* 空字符 可有可无,多了不限
1
[34578] 34578中挑一个
\d{9} 9位数字
(\+86|0086)?\s*1[34578]\d{9}
邮箱:
字母/数字或_ 一次以上
@
字母或数字 2位以上
(.和 字母或数字 2到3位) 1到2次
\[email protected][a-zA-Z0-9]{2,}(.[a-zA-Z0-9]{2,3}){1,2}