有了這個庫,寫正則表達式就像說話一樣簡單
正則表達式的確是一個強大的工具,但是它那天書一般晦澀難懂的語法,讓大部分初學者望而生畏。
第一次接觸時,你是不是跟小朋友一樣有很多問號?

即便是有經(jīng)驗的程序員,回頭看自己幾個月前寫的正則表達式,也有可能懷疑人生:這什么玩意兒?

除了語法難懂以外,還有一個痛點,就是直接寫出來的正則表達式是靜態(tài)的,想要定義動態(tài)的規(guī)則也不太方便。
天下苦正則久矣,誰能振臂一呼,解救萬千碼農(nóng)?別方,困擾程序員多年的正則恐懼癥,可能有救了!
主角就是今天要介紹的一個 JavaScript 庫:SuperExpressive。正如它的名字,它是通過表達性的自然語言來描述正則表達式。這個庫沒有其他額外的依賴,體積輕量,gzip 壓縮后不到 3 Kb!

SuperExpressive 通過可編程的方式,利用人類可讀的語言構(gòu)建正則表達式。它的 API 采用鏈式調(diào)用的設(shè)計,并且是不可變的(immutable)。它有以下幾個特點:
屬性和方法描述了要做的事情
調(diào)用順序很重要,比如量詞要寫在目標對象之前:
SuperExpressive().exactly(5).digit出錯了也很容易發(fā)現(xiàn),如果表達式無效,它會提示你如何修正
安裝使用
npm?i?super-expressive
const?SuperExpressive?=?require('super-expressive');
示例
下面是一個官方的例子,演示如何匹配十六進制形式的字符串,比如0xC0D3。
const?SuperExpressive?=?require('super-expressive');
const?myRegex?=?SuperExpressive()
??.startOfInput
??.optional.string('0x')
??.capture
????.exactly(4).anyOf
??????.range('A',?'F')
??????.range('a',?'f')
??????.range('0',?'9')
????.end()
??.end()
??.endOfInput
??.toRegex();
//?生成的正則表達式如下:
/^(?:0x)?([A-Fa-f0-9]{4})$/
怎么樣?從上往下看,是不是跟人類自然語言類似(只不過是英語),用屬性和方法描述了具體規(guī)則和行為。詳細的 API 可以參考它的 Github 倉庫
)。正則里各種特性,比如多行、全局匹配、元字符等,基本都有對應(yīng)的屬性和方法。
當然,要想無障礙地使用這個庫,還是需要對正則的基本概念有所了解。它的作用,只不過是把抽象的正則語法用更具表達性的自然語言來代替,方便開發(fā)者閱讀和維護。
如果覺得有用,趕快分享給你的小伙伴們吧!
順手點“在看”,每天早下班;轉(zhuǎn)發(fā)加關(guān)注,共奔小康路~
