js语言精粹-正则表达式与方法
JS 的正则借鉴的是 Perl,通常正则表达式相较于等效的字符串处理有显著的性能优势
。
看个例子
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Z-a-z]+)(?::(\d))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
一块块的看,(?:([A-Za-z]+):)?
,这里?:
代表后面的分组并不捕获(还蛮推荐这么做的,因为捕获会有性能上的缺失),最后的?
代表是可选的,0 次或者 1 次。()
这个代表捕获组。
(\/{0,3})
这个代表 0 个到 3 个/
。
([0-9.-A-Z-a-z]+)这个主要是里面的.
字符,这个字符在外面代表着任意字符,在中括号里面代表着.
。中括号里面好像就只有-
需要进行转义。
其他的就比较正常了。
标识
- g:全局,匹配多次,(不同的方法对这个的支持不同,exec 代表着下次匹配的位置,search 会忽略,match 会返回所有的匹配结果..)
- i:是否区分大小写
- m:是否支持多行(^和$能匹配航结束符,使用了 m 之后,正则表达式就会匹配每行的开头和结尾了)
如果我们创建一个正则表达式时使用 RegExp 的写法的,注意\
本身需要转义,也就是说我们使用他来转义时,需要使用两个。因为我是通过字符串的形式传入的,而字符串的\在正则和字符串中有特别的含义,所以这个符号我们需要进行转义。
RegExp 对象的属性
- global:如果标识 g 被使用,值就是 true
- ignoreCase:如果是 i 被使用,值为 true
- lastIndex:下一次 exec 匹配的索引,初始值为 0
- multiline:标识 m 被使用,值为 true
- source:正则表达式的源码文本
正则表达式的一些元素
- 分支:|,就是只要匹配任意一个条件,就会被匹配
- 序列:就是包含一个或多个正则表达式因子,每个因子能选择是否跟随一个量词
- 正则表达式因子:可以是一个字符,一个圆括号的组,一个字符类,或者一个转义序列
- 转义:其实就是要背一下咯,\d(匹配一个数字),\w(匹配数字字母下划线),\s(空白符),\1 代表分组 1 所捕获的文本的引用,这个很好使
- 分组
- 捕获型:
- 在圆括号中包住的就是一个捕获组,第一个就是分组 1,第二个就是分组 2
- (?
exp):这种写法就是指定了分组名为 name 了
- 非捕获型:就是
(?:)
这个仅能做简单的匹配,但是不会捕获所匹配的文本- 向前正向匹配:
(?=)
也是非捕获的,即使匹配前面的部分 - 向前负向匹配:
(?!)?
类似的,但是他是匹配失败才会继续向前进行匹配。
- 向前正向匹配:
- 字符集:
[]
就是一组字符的便利方式 - 转义:就是想匹配特殊字符本身,我们需要加个\来做这件事情
- 量词:
{}
就是这个因子要被匹配的次数,注意正则遵守贪婪匹配的原则
方法
Array
- array.concat():就是复制产生新数组,如果参数是数组,每一项会被单独的添加,并且是浅复制。两个对象如果更改的话会被同时更改。
- array.join():这个比使用+号运算符的速度要慢,因为现代的浏览器,包括 IE8 以后的版本,都对+号连接字符串进行了特别的优化了。
- array.pop():就是推出 array 的最后一个元素并且返回他。
- array.push():这个和 concat 差不多,但是他会整个推入内容,并返回新长度。
- array.reverse():这个会反转数组,并返回数组本身
- array.shift();移除第一个元素并且返回他,比 pop 慢多了。
- array.slice():就是切割数组,从起始位置到终点位置,只传一个值的话就截到最后,传负值的话就加上 length
- array.sort():默认就是当做字符串比较,也可以传入比较函数,如果返回的-1,则第一个参数排在前面
- array.splice():1 参位置,2 参删除的个数,后面的都是添加的
- array.unshift():就是从前部插入一个值。返回新长度
Function
apply 这个写的太多了
Number
- number.toExponential(小数点位数):就是转化为指数的形式,位数必须为 0-20
- number.toFixed(小数点位数):转化为十进制的字符串,这个值必须在 0-20
- number.toPrecision(整体的位数):转化为十进制的字符串,整体的位数必须为 0-21
- number.toString(几进制):这里控制是几进制显示
Object
- object.hasOwnProperty:判断这个属性是不是自带的
RegExp
- regexp.exec:最强大和最慢的方法,如果带有 g,则查找不是从起始位置,而是 lastIndex 的位置开始。
- regexp.test:最简单的和最快的方法,如果匹配,就返回 true,注意 g 标识是没有用的
String
- string.charCodeAt:返回的是那个位置的字符码位,如果小于 0 或大于等于 length,返回 NaN,这个蛮奇怪的..
- string.charAt
- string.concat:这个不如用+号呢
- string.indexOf
方法很多,就不一个个写了
代码风格以及特性
- 优秀的程序拥有前瞻性的结构,预见了修改,又不会让其成为过度的负担
- 清晰的表达方式
主要就是良好的习惯,包括空格习惯,tab 习惯等等,主要是能够规范编代码。
优秀特性
- 函数是顶级对象,有词法作用域的闭包
- 基于原型链继承的动态对象
- 对象字面量和数组字面量
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com
文章标题:js语言精粹-正则表达式与方法
文章字数:1.4k
本文作者:泽鹿
发布时间:2019-08-28, 16:45:23
最后更新:2019-08-28, 16:45:23
原始链接:http://panyifei.github.io/2019/08/28/读书笔记/Javascript语言精粹/正则表达式与方法/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。