20200915 王维

学习总结

1.正则表达式

常用字符集

[A-Za-z0-9] 匹配一位字母或数字

[xyz] 负值字符集合。匹配未包含的任意字符。

预定义字符集

\d 匹配一位数字,等效于 [0-9]

\w 匹配一位数字、字母或_,等效于 [A-Za-z0-9_]

\s 匹配一位空字符,空格,制表符Tab等空白字符

. 通配符,匹配除换行符 \n 之外的任何单字符,换行符平时看不见,但却是存在的

非打印字符

\b 匹配单词的开始或结束

\n 匹配一个换行符。等价于 \x0a 和 \cJ

\S 匹配任何非空白字符

\t 匹配一个制表符tab

\f 匹配一个换页符

\v 匹配一个垂直制表符

\r 匹配一个回车符

字符集量词

字符集{n} 字符数为n

字符集{n,m} 至少为n,最多为m

字符集{n,} 至少为n,最多不限

字符集? 可有可无,最多一次,相当于{0,1}

字符集* 可有可无,多了不限,相当于{0,}

字符集+ 至少一次,多了不限。相当于{1,}

选择和分组

子规则1|子规则2 | 选择符只分左右,不考虑单个字符

其他规则(多个子规则) 将多个子规则视为一组,再和分组外的规则匹配,当我们希望将多个子规则视为一个整体,再和其它规则匹配时,就用分组()

指定匹配位置

^ 匹配字符串开头

$ 匹配字符串结尾

\b 单词边界,可匹配由空格,标点符号,字符串开头和结尾等可将一个单词与其它单词分割开的符号

正则表达式修饰符

i 执行对大小写不敏感的匹配,意为忽略大小写

g 执行全局匹配(查找所有匹配,而不是在找到第一个匹配后停止)

m 执行多行匹配

s 特殊字符圆点 . 中包含换行符 \n

注意:因为/g代表全局匹配,正则判断时内部是有一个lastIndex来记录最后匹配的位置.当重复调用的时候,会接着上次的lastIndex继续匹配,故而将导致判断出错.

引用

所谓引用,就是在后面使用和前面完全相同的子表达式。我们把所有的带圆括号的子表达式编个号,从1开始。如果子表达式里面嵌套另外一层子表达式,引用时如何编号?简单来说,以子表达式前面的左括号的个数为准。

\n 引用编号为n的子表达式

RegExp

封装一条正则表达式,并提供用正则表达式执行验证和查找的API

var reg=new RegExp("正则表达式","ig");

var arr=reg.exec(str) 查找关键词

1.将本次找到的关键词,放入数组第0个元素,将每个分组的子内容放入后续元素

2.修改数组的index属性,记录本次找到关键词的位置

3.修改 reg.lastIndex属性 = index+关键词的长度

test() 验证 用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false

compile() 重新编译正则表达式 用于在脚本执行过程中编译正则表达式。也可用于改变和重新编译正则表达式

for of与for in

for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。

for in会遍历数组所有的可枚举属性,包括原型。for of遍历的只是数组内的元素,而不包括数组的原型属性method和索引name.所以for in更适合遍历对象,不要使用for in遍历数组。

for..of适用遍历数/数组对象/字符串/map/set等拥有迭代器对象的集合.但是不能遍历对象,因为没有迭代器对象.与forEach()不同的是,它可以正确响应break、continue和return语句

for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法:

for (var key of Object.keys(对象名称))

当你为对象添加myObject.toString()方法后,就可以将对象转化为字符串,同样地,当你向任意对象添加myObjectSymbol.iterator方法,就可以遍历这个对象了。

新的体会

今天学习了正则表达式,还学习了一部分的面向对象思想,JavaScript和java和还是有很大区别的,需要认真学习。

评论