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