前端星2020_4_10課程筆記

正則表達式

建立

字面量建立

  • 優勢:html

    • 簡單方便
    • 不考慮二次轉義
  • 缺點前端

    • 沒法複用
    • 過長的正則致使可讀性差

RegExp構造函數

  • 優勢node

    • 可複用
    • 分離出子內容 可讀性提升
  • 缺點web

    • 二次轉義 由於在字符串裏構建RegExp 因此會有二次轉義的問題

js正則常見用法

名稱 輸入 輸出
test 字符串 true/false
source(不是方法) 當前模式文本字符串
flags(不是方法) 修飾符的字符串
exec 字符串 成功->返回匹配結果 失敗->返回null
match 字符串 會返回數組(若是多個匹配)
lastIndex(不是方法) 當前正則表達式最後一次匹配成功的結束位置(也就是下一次匹配的開始位置)
replace 正則模式, 替換的子串 替換後的結果
search 正則模式 查詢到的匹配結果
split 正則模式 根據正則模式切割的結果數組

經過例子來講語法

固然首先來講一下思路啊 正則判斷的關鍵不是怎麼寫 是怎麼分析究竟要判斷啥 列舉出應該有的可能性正則表達式

  • 正則匹配數字(js中的數字)

初版 /^d+$/ npm

語法:位置匹配 ^ $ 元字符d 限定符(次數限定符)+ 固然實際上還有不少 例子只是舉其中幾個
問題:無符號 小數json

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

語法: []可選擇的一個組 ()子表達式 ?0或1次匹配
問題: ()子表達式有額外開銷 不能匹配無整數的數數組

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

語法:(?:) 建立一個非捕獲組 * 匹配零個或多個
問題:科學計數法 無小數部分的值 (沒完了QAQ)

avatar

最終版:(果真真相在圖裏啊) /^[+-]?(?: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

相關文章
相關標籤/搜索