正则表达式是一个描述字符模式的对象。
闭包
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁,函数套函数。
包装器函数
1)Number() :Number.prototype.xxx 2)String() : String.prototype.xxx 3)Boolean():Boolean.prototype.xxx
var str="hello"; //string
console.log(str.length);
//1.new String(str) object String 自动装箱 2.new string(str).length 通过实例对象调用方法3.str-->string 自动拆箱
var num=10;
console.log(num.toString());
console.log(num.toString());

new Number():包装器函数/构造函数
var a=new Number(); a:object
Number():转换函数
var a=Number(); a:number
String.prototype.xxx: string的构造函数原型对象的方法,每个字符串都可以调用
- 1.length:返回字符串长度
- 2.charAt(index):返回index位置的字符(下标)

- 3.charCodeAt(index):返回index位置对应的字符编码ASCII码

- 4.concat():字符串拼接 同+""效果相同

- 5.slice():字符串的截取
0:返回一个原字符串的复制字符串,不影响原字符串

1:从index开始截取,到字符串末尾结束

2:begin end 从begin开始结束到end结束,不包含end ,-1代表最后一个字符

- 6.substr:字符串截取
0:返回一个原字符串的复制字符串,不影响原字符串

1:从index开始截取,到字符串末尾结束

2:begin num 从begin开始截取,截取num个字符

- 7.substring:字符串截取 同slice相像
0:返回一个原字符串的复制字符串,不影响原字符串

1:从index开始截取,到字符串末尾结束

2:begin end 从begin开始结束到end结束,不包含end,当end为负数时,改变截取方向

- 8.indexOf():indexOf():全等比较,查找数组元素,默认从前向后查找,只找一个元素,对于找到的元素,返回元素的下标;对于找不到的元素,返回-1.
- 9.lastindexOf():查找数组元素,从后向前查找
- 10.trim():去掉字符串的前后空格,没有参数

- 11.toLowerCase():将字符串转换为小写
- 12.toUpperCase():将字符串转换为大写

- 13.search():搜索字符串 参数为字符串/正则表达式 找到返回下标,没找到返回-1,只能找到一个

- 14.replace(匹配字符串/正则表达式,插入的值):替换字符串

- 15.match():匹配字符串 参数字符串、正则表达式 匹配成功,返回一个匹配成功的字符串;匹配失败,返回null

- 16.split():分割字符,将分割后的字符组成一个数组:将字符串转换为数组

正则表达式
1.创建方式
1) 正则表达式字面量
var pattern = /s$/;
2) RegExp()构造函数
var pattern = new RegExp("s$");

2.修饰符
g global全局 例如var p1=/hello/g; RegExp("hello","g");
i ignore case不区分大小写
m multiline多行
3.字符类

[xyz]一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符‘-’指定一个范围。[0-9][a-z]
[^xyz]一个反义或补充字符集,也叫反义字符组。也就是说,它匹配任意不在括号内的字符。你也可以通过使用连字符'-'指定一个范围内的字符。必须在中括号里面添加^,在中括号外添加^,是以某一字符开头。

4.数量词 一定要用到子表达式之后
例如 var p1=/ \d{1,5} /g; 匹配数字,最少一次,最多5次

5.重复方式
贪婪 匹配重复字符时是尽可能多的匹配,默认{1,4}
非贪婪 匹配重复字符时是尽可能少地匹配,在待匹配的字符数量词后跟随一个问号即可
例如:{1,4}?
/a+/可以匹配一个或者多个连续的字母a,当使用“aaa”作为匹配字符串时正则表达式会匹配它的三个字符。
/a+?/可以匹配一个或者多个连续的字母a,但是尽可能少地匹配。只能匹配第一个a
6.选择
使用字符 "|" 分割供选择的字符。选择项的尝试匹配次序是从左到右,直到发现了匹配项,如果左边的选择项匹配,就忽略右边的匹配项,即使它产生更好的匹配。/ab|cd|ef/ 可以匹配 "ab"或者"cd"或者"ef"

7.分组
"()"作用:把单独的项组合成子表达式 以便可以像处理一个单元那样用"|""*""+""?"对单元内的项进行处理。

8.边界

9.原型属性

exec: 校验字符串是否有符合条件的字符串,如果有,返回数组,数组中存放的是符合条件的字符串,如果没有,返回null
例:
var pattern = /abc/gim;
var str = 'ababc acd abcd wee';
console.log(pattern.exec(str)); //['abc',index:2,input:'ababc acd abcd wee',groups:undefined]
console.log(pattern.lastIndex); //5 也就是下一次检索位置从5号开始 没有g的情况下每一次都从0开始
str中有两个abc,怎么样可以拿到两个abc? 前提有g修饰符,且调用两次exec,没有g的话每一次都会从0开始查找
var pattern = /abc(d|e)/img;
var str = 'ababcs acb abcd weeabce abss'
console.log(pattern.exec(str)); // ['abcd']
console.log(pattern.exec(str)); // ['abce']
循环调用exec方法,直到exec()==null就可以结束循环了
如果想拿到abcd abce放在一个数组中,怎么实现?
var pattern = /abc(d|e)/img;
var str = 'ababcs acb abcd weeabce abss'
var result; // pattern执行exec方法的结果
var temp=[]; // 匹配到的字符串 记录
while(result=pattern.exec(str)){
//result取值可以是数组,可以是null
//只要能进来循环体,那么result就是一个数组
temp.push(result); // tmp就是一个二维数组 [ [],[] ]
}
console.log(temp);
10.原型方法

test: 校验字符串是否符合正则表达式模式,返回true/false
exec: 校验字符串是否有符合条件的字符串,如果有,返回数组,数组中存放的是符合条件的字符串,如果没有,返回null