JavaScript正則庫:XRegExp
好像網上介紹JS正則庫的文章不多,可能也是因為復雜的正則匹配很少需要在客戶端運行,所以JS上用的不多,并且我搜JS的正則庫還真沒找到第二個,囧。但它的一些特性挺實用,有興趣的同學可以看看。由于沒花太多時間去琢磨,所以本文只將該庫作簡要介紹,本文用例全部來自它的API文檔。
XRegExp是一個為JS的正則表達式提供擴展功能的庫, 調用之后可以彌補原生JS在正則方面的一些不足,也在很大程度上增強了JS正則的功能。它解決了瀏覽器之間正則的兼容問題,且支持原生ES6正則語法(有關ES6中正則的新特性:參考New regular expression features in ECMAScript 6)
XRegExp的壓縮版大概4.25K,在性能上,由于XRegExp生成的正則都是原生的正則對象,其表現跟原生正則一樣, 只是在首次創建XRegExp正則的時候需要多點開銷。它的主要特點如下:
XRegExp的主要特性
-
擴展的正則語法,包括支持命名的捕獲組以及更強大的文本替換
</li> -
增加修飾符(flags)s支持單行模式;x忽略空格以及行注釋;n明確捕獲組模式;A支持21位Unicode匹配
</li> -
提供一套函數簡化正則處理
</li> -
解決跨瀏覽器的正則兼容問題
</li> -
在此基礎上提供擴展(addons)支持更多的正則語法和功能
</li> </ul>基本用法
XRegExp的最主要的API也就是這個構造函數XRegExp(pattern, [flags])其語法如下:
-
pattern參數為字符型的正則表達式
</li> -
[flags]為可選的正則修飾符,當然也是字符型,它支持原生的修飾符以及XRegExp中的擴展修飾符(特性中已列出)
</li> </ul>返回值為被擴展的正則對象。
比如:
// 使用了‘x’修飾符,所以忽略空格且支持行注釋 //忽略空格指的是正則中的空格被忽略 //(?<name>…)這種寫法即命名的捕獲組 // #...為行注釋 var date = XRegExp('(?<year> [0-9]{4} ) -? # year \n\ (?<month> [0-9]{2} ) -? # month \n\ (?<day> [0-9]{2} ) # day ', 'x');
//這里使用了XRegExp擴展的exec()方法 var match = XRegExp.exec('2015-02-22', date); match.year; // -> '2015'</pre>
以上這個栗子就體現了XRegExp在正則上強大的擴展功能,比如命名的捕獲組,正則注釋等,這從一定程度上彌補了原生JS正則上的不足。
有趣的特性
由于我并沒有看完它的所有API文檔, 也是剛接觸這玩意,所以這里只挑幾個我覺得比較實用的特性列舉。
迭代器forEach
它的語法格式為XRegExp.forEach(str, regex, callback)
-
str 被匹配的字符串
</li> -
regex 傳入的正則
</li> -
回調函數,該方法每次迭代將傳入回調函數4個參數
-
當前匹配的數組,并且帶命名的后向引用屬性
</li> -
當前匹配的索引位置
</li> -
正在被遍歷的字符串
</li> -
正在使用的正則對象
</li> </ul> </li> </ul>該方法遍歷被匹配的字符串,忽略其中正則全局修飾符g,也忽略lastIndex的初始值。
該方法無返回值。
例如:// 從被匹配的字符串中每次抽取一個數字放入偶數數組 var evens = []; XRegExp.forEach('1a2345', /\d/, function (match, i) { if (i % 2) evens.push(+match[0]); }); // evens -> [2, 4]
匹配鏈方法matchChain
匹配鏈方法可以從之前的匹配結果中調用下一個正則繼續匹配,就像從一個大范圍中使用不同的正則不斷篩選出你要的數據。
它的語法是XRegExp.matchChain(str, chain)-
str 被匹配字符串
</li> -
一個正則組成的數組,比如[reg1,reg2,...]
</li> </ul>該方法返回與匹配鏈條(正則數組)最后一個正則的匹配內容,或一個空數組。
例如:// 基本用法:抽取每個<b>標記包裹的數字 //(?is)是XRegExp中修飾符前置的語法,它等同于在正則后加修飾符i s XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [ XRegExp('(?is)<b>.*?</b>'), /\d+/ ]); // -> ['2', '4', '56']
// 返回命名的捕獲組內容(后部引用) html = '<a href=" <a href="正則合并方法union
該方法可以將需要匹配的字符串或者正則表達式合并為一個正則表達式,帶后部引用的正則在合并時將被重新編碼,其語法格式為XRegExp.union(patterns, [flags])
-
patterns為一個數組,數組元素可以是要匹配的字符串或正則
</li> -
可選的修飾符flags
</li> </ul>返回值為合并后的正則表達式。
例如:XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i'); // -> /a\+b\*c|(dogs)\1|(cats)\2/i
大致先寫這么多,還有什么使用21位unicode匹配表情符也蠻好玩的,再看到什么更好玩的繼續補上吧。
來自:http://segmentfault.com/a/1190000004141584
以上內容主要還是大致翻譯API原文加上我自己的一些理解,這篇介紹都很簡略,看著可能有點不太清楚,如有什么錯漏還請指出。查看更詳細的資料或者下載直接去它的主頁吧。
XRegExp的主頁:XRegExp Github :XRegExp 3.0.0
-
-
-
-
-