正則表達式匹配單行、多行注釋思路以及代碼詳解
該正則表達式用于匹配單行注釋、多行注釋、JSDoc注釋
我的需求是用new Function去執(zhí)行一段javascript代碼,怕代碼一多,注釋會影響效率,因此我需要尋找字符串的所有類型的注釋,將其全部替換為空字符串。
如果僅需要表達式可以直接查看文末總結處
單行注釋
//我是單行注釋
它的正則表達式長這樣,因為要匹配多個結果,因此使用g修飾符進行全局搜索
const regexp = /\/\/.+\n?/g
用正則表達式測試工具進行匹配,匹配結果如下圖
我們知道\反斜杠是作為轉(zhuǎn)義字符使用的,所以該表單是是全局匹配 //后面加上一個或多個除換行符以外的所有字符
細心的同學可能會發(fā)現(xiàn),測試的時候并沒有\(zhòng)n?,是的,上面測試的正則忽略了換行符
我們直接把匹配到的內(nèi)容替換為空字符串,發(fā)現(xiàn)有好幾個換行符,因為正則表達式的.表示除換行符以外的所有字符,但我們?nèi)绻€希望把換行符刪除,那就得在后面添加\n換行符了
然后我們又發(fā)現(xiàn)匹配不到最后一行的注釋,是的,因為最后一行的注釋后面沒有換行符,不滿足我們的正則表達式,我們肯定是希望能夠匹配到的,那么我們最后再對表達式做一下修改,在\n后面添加? ,表示匹配0個或者1個換行符即可
匹配單行注釋的表達式就介紹到這里了,下面是多行注釋。
多行注釋/JSDoc注釋
/* 我是多行的多行注釋 */ /* 我是單行的多行注釋 */ /** * JSDoc注釋 * @param xxx */
它的正則表達式長這樣
const regexp = /\/\*[^\/]*\*\/\n?/g
下文把以/*開頭,*/結尾的注釋稱為多行注釋
多行注釋又有兩種情況,一種是多行的多行注釋 ,一種是單行的多行注釋
而JSDoc注釋本質(zhì)上也就是多行注釋,
我的匹配思路是,/*+除了/的任意字符+*/ + \n換行符(若有)
首先是匹配 /*,表達式如下
const regexp = /\/\*/g
這樣注釋的開頭就匹配出來了。
然后是匹配 除了/的任意字符
const regexp = /[^\/]*/g
上述正則表達式的意思是匹配0次或者多次除了/ 之外的字符
這邊使用 /*+除了/的任意字符 進行匹配,從/*一直匹配到/(不包含)為止,匹配結果如下
最后匹配 */ + \n換行符(若有)
const regexp = /\*\/\n?/g
注意為啥最后要匹配 */ 而不是 / ,先看一下直接匹配 / ,如下圖
我們可以看到圖中圈出的這種情況下,/* /abc */直接匹配了/* /,這肯定不是預期效果,如果替換掉肯定語法報錯了,因此我們寧愿不匹配這個,所以即使我們從/*匹配到/,也需要對注釋結束進行限制,必須以*/結束才匹配,下面是匹配的最終效果。
最后我們使用 | 把單行注釋和多行注釋合并在一起的到匹配單行注釋多行注釋的正則表達式
const regexp = /\/\*[^\/]*\*\/|\/\/.+\n?/g
總結
匹配單行注釋正則表達式
const regexp = /\/\/.+\n?/g
匹配多行注釋正則表達式
const regexp = /\/\*[^\/]*\*\//g
匹配單行/多行注釋正則表達式
const regexp = /\/\*[^\/]*\*\/|\/\/.+\n?/g
到此這篇關于正則表達式匹配單行、多行注釋思路以及代碼詳解的文章就介紹到這了,更多相關正則表達式匹配單行多行注釋內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
判斷用戶輸入的銀行卡號是否正確的方法(基于Luhn算法的格式校驗)
下面小編就為大家?guī)硪黄袛嘤脩糨斎氲你y行卡號是否正確的方法(基于Luhn算法的格式校驗)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04ExtJS4的文本框(textField)使用正則表達式進行驗證(Regex)的方法
Extjs的Regex的驗證屬性分兩種情況,一種是只有紅色提示框;另一種是在提示框邊會出現(xiàn)一個類似批注的提示信息,不過在頁面加載時要加上Ext.QuickTips.init();提示框才能正常顯示出來2016-02-02