前端星2020_4_10课程笔记

正则表达式

创建

字面量创建

  • 优点:

    • 简单方便
    • 不考虑二次转义
  • 缺点

    • 无法复用
    • 过长的正则导致可读性差

RegExp构造函数

  • 优点

    • 可复用
    • 分离出子内容 可读性提高
  • 缺点

    • 二次转义 因为在字符串里构建RegExp 所以会有二次转义的问题

js正则常见用法

名称 输入 输出
test 字符串 true/false
source(不是方法) 当前模式文本字符串
flags(不是方法) 修饰符的字符串
exec 字符串 成功->返回匹配结果 失败->返回null
match 字符串 会返回数组(如果多个匹配)
lastIndex(不是方法) 当前正则表达式最后一次匹配成功的结束位置(也就是下一次匹配的开始位置)
replace 正则模式, 替换的子串 替换后的结果
search 正则模式 查询到的匹配结果
split 正则模式 根据正则模式切割的结果数组

通过例子来说语法

当然首先来说一下思路啊 正则判断的关键不是怎么写 是怎么分析究竟要判断啥 列举出应该有的可能性

  • 正则匹配数字(js中的数字)

第一版 /^d+$/

语法:位置匹配 ^ $ 元字符d 限定符(次数限定符)+ 当然实际上还有很多 例子只是举其中几个
问题:无符号 小数

第二版 /^[+-]?d+(.d+)?$/

语法: []可选择的一个组 ()子表达式 ?0或1次匹配
问题: ()子表达式有额外开销 不能匹配无整数的数

第三版 /^[+-]?(?:d*.)?d+$/

语法:(?:) 创建一个非捕获组 * 匹配零个或多个
问题:科学计数法 无小数部分的值 (没完了QAQ)

前端星2020_4_10课程笔记_第1张图片

最终版:(果然真相在图里啊) /^[+-]?(?:d+.?|d*.d+)(?: e[+-]?d+)?$/i
语法:| 创建分支

当数值带上单位:/[+-]?(?:d*.)?d+(?:e[+-]?d+)?(?=px|s|$)/gi
语法:向后查找 ?= 当然前后查找有很多别的了

后面的例子大同小异 只是涉及到一些新的语法而已 但是关键还是写正则一定要认真分析需求

分享一下自己常用的正则网站 QAQ

NodeJS

  • 天生的异步io 实际上是用libuv做的
  • 基于commonjs的模块管理
  • C++ addonApi node-gyp

Nodejs 模块机制

nodejs 常见模块

  • 内置模块 fs net dgram http crypto event os process 等等
  • 文件模块

commonjs 规范

模块路径查找:
绝对路径
相对路径
和当前路径处理为绝对路径
模块/文件夹
原生模块,直接读取缓存
[$NODE_PATH, ~/.node_modules,
./node_modules, ../node_modules, ...]
解析 package.json,查找 main 属性,没有则使用 index.js
如果未找到,则报错

动态模块方式:运行时才导入 但同时导入的实际上是复制
挂在位置是module.exports export也指向这个地址 但是真正出去的是module.exports 神魔之井 require 读取

缓存位置在module.cache上

其实模块模式本身就是闭包的伟大实现 可以避免污染变量环境

NPM

nodejs包管理器 实际上前端现在也用 为了方便前端 npm的新版本依赖采取扁平化的管理 不过死月大佬一直说也许我们应该回去用npm2.X

nodejs WEB开发

  • 原生的http 模块
  • Koa2
  • thinkjs 当然其实国内基于koa的还有蚂蚁金服的egg.js

当然上面的都是要做http服务器 实际上你要是想做一个tcp服务器可以用net库 UDP则用dgram库

因为nodejs这讲主要其实还是针对后端扫盲多一点 作为一个后端练习时长一年半的nodejs练习生 我来记录一些在学习中觉得很重要的部分吧

  • nodejs 的事件驱动机制 和 事件循环

贴一篇朴灵老师的经典文章 虽然原来印象笔记的版本看不到了
这篇文章其实讲了很多内容 包括同异步的概念的辨析 当然本身是针对阮一峰老师科普文写的 还很有看点(其实阮老师的看法还是挺普遍的)我愿称这篇文章为nodejs界的《关于两个世界系统的对话》

  • 同步 异步 阻塞 非阻塞

虽然看起来同步和阻塞 异步和非阻塞好像是天然绑定的 但是同异步本身是指的我们对任务的执行结果能不能立即得到 而阻塞非阻塞实际上是系统的io机制 对于操作系统来说这其实是两回事(虽然不影响我们经常混着说)

  • buffer

Buffer 可以说是一个node为了性能考虑的部分 操作更偏向字节 性能相关部分使用C++实现

  • Process

怎么说作为单线程的语言 在这个硬件爆炸的时代怎么能够用呢 使用process 来做多进程的架构 通过IPC管道来通信 不过说起来现在前端也有web workers
不过web workers 本身是多线程(为了防止多线程的问题--主要是各种锁 我们可怜的web workers 一堆不能操作的限制 让我们再回顾一遍 线程是调用的单位,进程是资源分配的单位)

暂时也就想到这里 以后如果再有什么感悟再回来加吧 QAQ

你可能感兴趣的:(前端,npm,node.js)