基本上Mock數(shù)據(jù)的庫逝她,都會(huì)有支持使用正則表達(dá)式來mock字符串的庫徘禁,suchjs也一樣缩幸。
由于這個(gè)功能本身具有很大的獨(dú)立性集惋,所以單獨(dú)提成一個(gè)庫也非常常見孕似。JS里實(shí)現(xiàn)類似功能的庫已經(jīng)有不少,比較流行的比如 randexp芋膘,看其測試覆蓋率已經(jīng)達(dá)到100%鳞青,是一個(gè)測試良好的庫。
但這些庫比如 randexp为朋,開發(fā)時(shí)間比較偏早臂拓,導(dǎo)致有些功能支持得不是很全。對于suchjs而言习寸,有個(gè)很重要的設(shè)計(jì)就是胶惰,有時(shí)候需要對一些匹配分組進(jìn)行預(yù)設(shè)定,從而針對同一個(gè)正則表達(dá)式霞溪,不同的分組配置能生成不同的結(jié)果孵滞。這一點(diǎn) randexp 顯然是無法滿足的,首先鸯匹,randexp 不支持對某個(gè)分組預(yù)設(shè)定值坊饶;其次,randexp 也沒有對最新的命名分組語法做支持殴蓬。舉個(gè)例子來說:
var mockRule = /(http|https):\/\//;
// 這里針對第一個(gè)分組匿级,我想配置某些情況下蟋滴,只匹配出 http 或者 https
// 這在 randexp 這類的庫里是沒法實(shí)現(xiàn)的
// 在reregexp庫里實(shí)現(xiàn)了該功能
// 首先在reregexp里,實(shí)現(xiàn)命名表達(dá)式語法的解析
// 其次痘绎,在配置里支持了 namedGroupConf 配置
var mockRule = new ReRegExp('/(?<protocol>http|https):\\/\\//', {
namedGroupConf: {
// 會(huì)用該配置列表中的值強(qiáng)制替換分組中的值
// 同時(shí)還會(huì)校驗(yàn)值是否符合分組的正則語法
'protocol': ['http']
}
});
另外津函,randexp 里也不支持最新的 u
unicode flag,從而 /\u{4e00}/
這種類似的語法寫法無法得到支持孤页。這些都是導(dǎo)致我決定自己開發(fā)一個(gè)正則模擬庫的原因尔苦。在這個(gè)庫 reregexp
里,對正則表達(dá)式的語法解析對各種邊界語法處理都完全按照js正則本身的規(guī)則進(jìn)行了實(shí)現(xiàn)行施,所以它具備了比 randexp 更完備更強(qiáng)大的功能允坚,更多的功能細(xì)節(jié)可以在 https://github.com/suchjs/reregexp github上可以看到,希望它能給如同我一樣有類似需求的人帶來一些幫助蛾号,如果你恰好用得到歡迎star和提issue屋讶。