亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

實現正則表達式highlight高亮的方法

2024-09-07 17:40:15
字體:
來源:轉載
供稿:網友

我們在編寫代碼的時候一般情況下都少不了和字符串以及“查詢”打交道的,這兩者交集中我們需要接觸到正則表達式,一般正則表達式用來提高編程效率,那么下面我們就去看看實現正則表達式highlight高亮的方法。

  關于正則的使用,舉個簡單的例子:

?

?

var m = location.href.match(/(/w+:)//{0,3}([^//]+)(?:(//[^/?#]*))?(?:(/?[^#]+|.+))?(?:(#.*))?/);
var res = {
??? protocol: m[1],
??? host: m[2],
??? path: m[3],
??? search: m[4],
??? hash: m[5]
};
console.log(res);

?

  憋了幾分鐘= =||,我也覺得這個正則不是特別好理解(紅黑相間了,應該稍微清晰點),有些朋友可能不知道(?:content)是什么意思,還有類似(?!content)和(?=content)分組和前瞻的知識,建議去問問度哥和谷娘。


一. 正則應用小DEMO示例

下面是一串隨手寫的代碼,放在textarea中:

?

?

/**
* @author barret lee
* @date?? 2013-10-06
* @email? barret.china@gmail.com
*/

?

//outer var
var a = "this id outer string";

//closure
function b() {
?//inner var
?var a = "this is inner string";
?var g = a.replace(/this is inner string/g, function() {
??return new Function("/*clousure*/this.a")();
?});

?/**
?* @description closure - regExp test
?* @author barret lee
?*/
?function c() {
??return {
???a: a,
???g: g
??}
?}

?return c;
}

var s = b()(); //s.a, s.g

?

正則匹配,處理上面那堆字符串的小DEMO:

?

?

/**
* @author barret lee
* @date 2013-10-06
* @email barret.china@gmail.com
*/

?

//outer var
var a = "this id outer string";

//closure
function b() {
??? //inner var
??? var a = "this is inner string";
??? var g = a.replace(/this is inner string/g, function() {
??????? return new Function("/*clousure*/this.a")();
??? });

??? /**
??? * @description closure - regExp test
??? * @author barret lee
??? */
??? function c() {
??????? return {
??????????? a: a,
??????????? g: g
??????? }
??? }

??? return c;
}

var s = b()(); //s.a, s.g

?

跟著提示,下一步下一步多點幾下,可以看出效果還是可以滴。主要是這里的正則略微的麻煩,處理一個色變得琢磨老半天。

P.S:上面這玩意兒只是一個小測試,代碼相當不健壯,拿著學習正則練手~

二. 需要注意的地方

?

?

//step config
var config = {
??? regs: [
??????? /^/s+|/s+$/g,
??????? /(["'])(?://.|[^///n])*?/1/g,
??????? ///(?!/*|span).+//(?!span)[gim]*/g,
??????? /(////.*|///*[/S/s]+?/*//)/g,
??????? /(/*/s*)(@/w+)(?=/s*)/g,
??????? //b.../b/g
??? ],
  //...
};

?

這些正則我是分開來寫的,主要是為了做上面那個demo,方便單步顯示。但是把這些正則分開寫是相當不合理的,放在textarea中的是一串沒有任何標簽的字符串,為了著色,每處理一個正則都會在codes中插入一些標簽(我這里用的是span),當我們處理下一個正則的時候就必須得考慮上一步加入的標簽,這樣會很大程度提高開發難度,最好的做法是把這些正則都放到一坨,然后用|隔開:

?

?

var reg = (/^/s+|/s+$/)|(/(["'])(?://.|[^///n])*?/1/)|(///(?!/*|span).+//(?!span)[gim]*/)|(/(////.*|///*[/S/s]+?/*//)/)|(/(/*/s*)(@/w+)(?=/s*)/)|(//b(break|continue|do|for|in|function|if|else|return|switch|throw|try|catch|finally|var|while|with|case|new|typeof|instance|delete|void|Object|Array|String|Number|Boolean|Function|RegExp|Date|Math|window|document|navigator|location|true|false|null|undefined|NaN)/b)

?

這樣放的好處是可以直接

?

?

codes.replace(reg, function(){
??? var args = arguments;
??? //...
});

?

一次性處理,不用擔心插入標簽影響最后的結果,因為標簽是同一時間插入的,不會有干擾。

代碼高亮插件highlight的基本原理也差不多,只不過他的容錯機制和代碼健壯性這塊做的更加完善,我在代碼里頭加了一個配置文件,

?

?

var colors = {
??? string: "#FFA0A0",
??? reg: "#16E916",
??? note: "#888",
??? tag: "orange",
??? keywords: "#B0B0FF"
};

?

按照自己的喜好,也可以加以修改,類似這樣的擴展,我們在寫代碼的時候稍微注意下,多留幾個接口就好了。(不過這些活兒干起來都還挺辛苦的~)

沒有做成插件,也沒這個必要,知道基本原理然后動手實踐下就差不多了。

三. 小結

類似很多的前端模板,artTemplate,baiduTemplate等都是對正則表達式的絕倫應用,很值得去看看源碼,好好鉆研人家都考慮了那些容易出錯的點,源碼都不長,兩三百行。了解一個大概比較容易,但是當自己動手的時候總會發現很多細節問題處理不好,我那上面幾個正則就倒弄了半天= =

上文就是小編為大家介紹實現正則表達式highlight高亮的方法,這個方法用起來還是挺方便的。正則技能,你值得擁有~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品成人av| 欧美日韩激情网| 欧美乱妇40p| 国产丝袜视频一区| 久久综合久久88| 九色精品免费永久在线| 97**国产露脸精品国产| 国产精品偷伦免费视频观看的| 日韩欧美成人网| 久久精品精品电影网| 国产欧美在线观看| 最近更新的2019中文字幕| 深夜福利国产精品| 一本色道久久88综合日韩精品| 欧美日韩国产综合视频在线观看中文| 欧美猛少妇色xxxxx| 奇米四色中文综合久久| 国产精品扒开腿爽爽爽视频| 国产精品jizz在线观看麻豆| 久久久久久久久久国产精品| 国产精品久久久久久久av大片| 国产精品白嫩美女在线观看| 国产精品a久久久久久| 久久久久国产一区二区三区| 成人激情视频在线播放| 欧美在线激情网| 97久久精品人搡人人玩| 亚洲一区二区久久久| 欧美另类暴力丝袜| 欧美另类交人妖| 欧美成在线视频| 热久久美女精品天天吊色| 日韩在线播放视频| 亚洲国产精品一区二区三区| 91精品免费久久久久久久久| 亚洲欧洲中文天堂| 国产精品免费一区二区三区都可以| 成人国产亚洲精品a区天堂华泰| 91精品国产乱码久久久久久久久| 国产日产亚洲精品| 神马久久久久久| 久久精品国产96久久久香蕉| 97视频在线观看免费高清完整版在线观看| 久热精品视频在线观看| 韩国视频理论视频久久| 欧美视频13p| 最新的欧美黄色| 国产精品美女在线| 国产精品网站视频| 77777亚洲午夜久久多人| 国产精品最新在线观看| 91精品国产自产91精品| 欧美电影免费观看电视剧大全| 国产99久久精品一区二区| 亚洲亚裔videos黑人hd| 日本成人精品在线| 国产精品欧美久久久| 色哟哟网站入口亚洲精品| 欧美精品videos性欧美| 国产精品福利片| 亚洲欧美999| 日韩欧美在线字幕| 欧美激情综合亚洲一二区| 亚洲精品免费在线视频| 91精品国产综合久久男男| 国产精品美女久久久久av超清| 日韩av在线网站| 欧美极品少妇xxxxⅹ裸体艺术| 88xx成人精品| 国产欧美一区二区三区视频| 亚洲国产精品中文| 亚洲欧美日韩精品久久| 96国产粉嫩美女| 国产精品xxx视频| 日本精品久久久久久久| 精品亚洲夜色av98在线观看| 久久久久久久久久久免费精品| 91丨九色丨国产在线| 国产99久久久欧美黑人| 国产精品久久网| 亚洲视频电影图片偷拍一区| 精品久久久精品| 91探花福利精品国产自产在线| 国产精品福利小视频| 日韩欧美中文在线| 日韩视频一区在线| 国产精品久久久久久av福利软件| 亚洲色图色老头| 国产综合视频在线观看| 成人免费网站在线观看| 亚洲va国产va天堂va久久| 久久久国产精品一区| 欧美激情一级精品国产| 亚洲变态欧美另类捆绑| 欧美一级淫片播放口| 亚洲免费伊人电影在线观看av| 夜夜嗨av一区二区三区免费区| 亚洲色图校园春色| 91sao在线观看国产| 全色精品综合影院| 亚洲视频网站在线观看| 日韩精品视频免费在线观看| 欧美大胆在线视频| 91在线免费网站| 日韩美女免费观看| 萌白酱国产一区二区| 亚洲电影在线观看| 国产一区二区三区日韩欧美| 久久精品视频中文字幕| 高清欧美性猛交xxxx黑人猛交| 亲爱的老师9免费观看全集电视剧| 日韩久久免费电影| 国产精选久久久久久| 欧亚精品在线观看| 国产精品96久久久久久又黄又硬| 日韩精品一区二区视频| 久久亚洲精品成人| 国产精品美女在线观看| 日韩综合中文字幕| 国产欧美久久一区二区| 色偷偷888欧美精品久久久| 中文字幕9999| 欧美国产日韩免费| 国产亚洲a∨片在线观看| 日韩欧美国产激情| 亚洲男人天堂古典| 国产精品美女视频网站| 奇门遁甲1982国语版免费观看高清| 蜜月aⅴ免费一区二区三区| 在线电影欧美日韩一区二区私密| 久久九九精品99国产精品| 精品国产乱码久久久久久虫虫漫画| 久久精品中文字幕一区| 欧美另类交人妖| 欧美激情一区二区三级高清视频| 国产999精品久久久| 亚洲欧美国产日韩中文字幕| 国产精品扒开腿爽爽爽视频| 国产成人在线播放| 亚洲自拍偷拍福利| 欧美裸体男粗大视频在线观看| 久久成人这里只有精品| 91亚洲国产成人精品性色| 国产精品激情av电影在线观看| 日韩乱码在线视频| 亚洲电影天堂av| 精品国产91乱高清在线观看| 欧美中文在线字幕| 日韩av免费在线观看| 97久久精品人搡人人玩| 亚洲精品国产福利| 91久久综合亚洲鲁鲁五月天| 97视频在线观看网址| 91中文字幕在线观看| 亚洲高清av在线| 日韩精品在线电影| 国产精品男人爽免费视频1| 日韩高清av在线| 亚洲第一av网| 亚洲精品wwww| 欧美日韩国产精品专区| 日本免费在线精品| 久久久精品一区| 欧美国产日韩xxxxx|