今天完成的事情:
今天主要看了下正则表达式相关的语法
做了自己的简历
明天计划的事情:
修复产品提的bug,看一下红宝书闭包相关知识
遇到的问题:
正则表达式看了很多,自己想通过正则把"aaaabbbbbccccddd"转换成a4b5c4d3,还没做出来,明天再想想
收获: 整理下正则表达式相关知识点,https://regexper.com
什么是正则表达式:Regular Expression使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。
REGEXP对象:JS通过内置对象 RegExp支持正则表达式,有两种方法实例化对象
1.字面量:var reg=/\bis\b/; object.replace(reg,'IS')
2.构造函数 var reg=new RegExp('/\bis\b/')
修饰符:g 全文搜索,i ignore case忽略大小写 m:multiple lines多行搜索
正则表达式由两种基本字符类型组成:
1.原义文本字符
2.元字符
.(点) 表示任意字符
\d 数字0-9
\D 非\d,即不是数字0-9的字符
\w 数字0-9,或字母a-z(大小写都可以),或下划线
\W 非\w
\s 空格符,TAB,换页符、换行符
\S 非\s
\t\r\n\v\f tab回车,换行,垂直制表符,换页符
范围符号:
[]表示字符范围 //[a-z] [0-9] [A-Z0-9a-z]
[^...] 字符范围以外 //[^a-z] [^abc]
^ 行首 //^Hi
$ 行尾 //text$
\b 零宽单词边界 //\bno
\B 非\b
特殊符转义:
/\^abc/.text('^abc') //如果想匹配^符号 使用\符号
分组:
(x) 分组,并记录匹配到的字符串 /(abc)/
\n 表示使用分组符(x)匹配到的字符串 /(abc)\1/.text(‘abcabc’)
(?:x) 仅分组 /(?:abc)(def)\1/.text(abcdefdef) (?:x)表示仅分组,不会表示在\1里面。 如果没有问号第一组引用在\1上,第二组引用在\2上
重复:
x* 表示重复0次或多次,x+表示重复一次或多次。默认才用贪婪算法,abc*将匹配ab、abc、abcccccccc这种。 abc+将匹配abc、abcccc不匹配ab
x*? x+? 同x* x+非贪婪算法,非贪婪算法即匹配尽可能少。abc*?在字符串abcccc将匹配ab(尽可能少c一个都没有)。abc+?则匹配abc
x? 表示出现0次或者一次
x|y 表示x或者y x|y 匹配x也匹配y 再比如ab/cd/ef 匹配ab或cd或ef
x{n}x{n,}x{n,m} 重复n次,重复>=n次,重复次数满足n<=x<=m.
例如:x{5}:只要是重复五次就可以匹配成功。 x{1,3}匹配x,xx,xxx
前瞻:正则表达式从文本头部向文本尾部解析,文本尾部方向称为前瞻
前瞻就是正则表达式在匹配到规则的时候,向前检查是否符合断言。后瞻方向相反。JS不支持后瞻
符合和不符合特定断言称为肯定/正向匹配和否定/负向匹配
正向前瞻:exp(?=assert) ‘a2*3’.replace(/\w(?=\d)/g,'X') X2*3
对象属性:
1.global
2.ignore case
3.multiline
4.lastIndex:当前表达式匹配内容的最后一个字符的下一个位置。
5.source:正则表达式文本字符串
string类型与正则相关的方法:
String.prototype.search "abcabcdef".search(/(abc)\1/); //0
search搜索,表示abc出现的索引
String.prototype.replace “aabbbbcc“.repleace(/b+?/,"1") //aa1bbbcc
replace替换,前面是要替换的,后面是替换成什么。?表示非贪婪算法,替换尽可能少
String.prototype.match "aabbbbcc".natch(/b+/); //["bbbb"]
"aabbbbccbbaa".match(/b+/g) ["bbbb","bb"] match匹配需要过滤的东西
String.prototype.split "aabbbbccbbaa".split(/b+/); ["aa","cc","aa"]
评论