中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

如何實(shí)現(xiàn)正則表達(dá)式的JavaScript的代碼高亮
來(lái)源:易賢網(wǎng) 閱讀:1240 次 日期:2014-08-15 16:18:16
溫馨提示:易賢網(wǎng)小編為您整理了“如何實(shí)現(xiàn)正則表達(dá)式的JavaScript的代碼高亮”,方便廣大網(wǎng)友查閱!

今天想改一下JS的高亮的配色,憋了一下午憋出了這個(gè)這個(gè)正則表達(dá)式。

下面這老長(zhǎng)老長(zhǎng)了的玩意兒是個(gè)正則表達(dá)式,看到了別嚇壞了。

代碼如下:

/(\/\/.*|\/\*[\S\s]+?\*\/)|((["'])(?:\\.|[^\\\n])*?\3)|\b(break|continue|do|for|in|function|if|else|return|switch|this|throw|try|catch|finally|var|while|with|case|new|typeof|instance|delete|void)\b|\b(Object|Array|String|Number|Boolean|Function|RegExp|Date|Math|window|document|navigator|location)\b|\b(true|false)\b|\b(null|undefined|NaN)\b|(?:[^\W\d]|\$)[\$\w]*|(0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE]\d+)?)|(?:[^\)\]\}]|^)(\/(?!\*)(?:\\.|[^\\\/\n])+?\/[gim]*)|[\S\s]/g

現(xiàn)在,我們可以來(lái)慢慢分析它。仔細(xì)看這個(gè)正則表達(dá)式你會(huì)發(fā)現(xiàn),它們是很多個(gè)正則表達(dá)式用|連接起來(lái)的。現(xiàn)在,我們把它用|分割,逐個(gè)分析。

代碼如下:

(\/\/.*|\/\*[\S\s]+?\*\/)

這是第二個(gè),這個(gè)正則表達(dá)式是用來(lái)匹配字符串的。字符串可以在單引號(hào)和雙引號(hào)中,所以我們匹配這兩個(gè)的任意一個(gè)。這里需要用一個(gè)括號(hào)把它括起來(lái)表示它是一個(gè)獲取匹配(“獲取匹配”的“獲取”是名詞),因?yàn)樵诮Y(jié)束的地方還需要匹配這個(gè)字符。在匹配字符串結(jié)束的地方可以用后向引用\3來(lái)匹配字符串開(kāi)始的字符,也就是開(kāi)始時(shí)的引號(hào)種類(lèi)。如果你從這整個(gè)正則表達(dá)式的開(kāi)頭開(kāi)始數(shù),你就會(huì)發(fā)現(xiàn)["']外面的括號(hào)是整個(gè)正則表達(dá)式中的第三個(gè)獲取匹配。這就是字符串的頭尾部分,中間的部分由于字符串是可以包含轉(zhuǎn)義的,所以我們一旦遇到反斜杠就直接跳過(guò)它后面那個(gè)字符,因?yàn)榉葱备芎竺姘氖寝D(zhuǎn)義。但是這僅僅是匹配轉(zhuǎn)義,所以我們要用或運(yùn)算|連接一個(gè)匹配非轉(zhuǎn)義的表達(dá)式,那就是[^\\]??墒沁@個(gè)是匹配非反斜杠的任何字符,它可以包含換行,而JS中的字符串是不允許寫(xiě)成換行的。所以我們需要加個(gè)\n讓它不匹配換行。由于我們使用了或來(lái)連接,而或的優(yōu)先級(jí)非常低,所以需要在旁邊加上括號(hào)來(lái)修正優(yōu)先級(jí)。如果使用普通的括號(hào)就會(huì)占用一個(gè)獲取匹配,所以我們要使用(?:)來(lái)完成一個(gè)非獲取匹配。

代碼如下:

\b(break|continue|do|for|in|function|if|else|return|switch|this|throw|try|catch|finally|var|while|with|case|new|typeof|instance|delete|void)\b|\b(Object|Array|String|Number|Boolean|Function|RegExp|Date|Math|window|document|navigator|location)\b|\b(true|false)\b|\b(null|undefined|NaN)\b

這是第3、4、5、6個(gè),這些只是匹配一些關(guān)鍵字,由于需要的顏色不同所以被分組了。這沒(méi)什么好說(shuō)的,跳過(guò)。

代碼如下:

(?:[^\W\d]|\$)[\$\w]*

這是第七個(gè),它的作用是匹配普通的變量名。如果變量名的字符不消耗掉,后面匹配數(shù)字的就有可能會(huì)把變量名中的數(shù)字匹配輸出來(lái)。所以這一步是必須的。你會(huì)發(fā)現(xiàn)這一步?jīng)]有任何獲取匹配,因?yàn)樽兞棵念伾悄J(rèn)顏色,我們不獲取它。根據(jù)JS的命名規(guī)則,變量名是不能以數(shù)字開(kāi)頭的,所以我們用[^\W\d]|\$匹配一個(gè)變量的開(kāi)頭。后面則可以匹配數(shù)字、字母、下劃線、美元符號(hào),任意次。這樣變量名就被消耗掉了。

代碼如下:

(0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE]\d+)?)

這是第八個(gè),匹配數(shù)字的。由于數(shù)字的表達(dá)方式有兩種,所以我們要分開(kāi)寫(xiě)。|的左邊是16進(jìn)制的數(shù)字寫(xiě)法。右邊是普通的數(shù)字寫(xiě)法,這個(gè)可以包含小數(shù)和科學(xué)計(jì)數(shù)法。由于小數(shù)和科學(xué)計(jì)數(shù)法都是可選存在的,所以我們把它括號(hào)起來(lái),后面加上問(wèn)號(hào)作為可選匹配。

代碼如下:

(?:[^\)\]\}]|^)(\/(?!\*)(?:\\.|[^\\\/\n])+?\/[gim]*)

這是第九個(gè),匹配正則表達(dá)式的。前面有個(gè)非獲取匹配,匹配非括號(hào)的結(jié)束。因?yàn)槿绻嬖诶ㄌ?hào),那么斜桿就有可能表示的是除號(hào)而不是正則表達(dá)式了。后面就是正則表達(dá)式的匹配,和字符串的匹配類(lèi)似,只不過(guò)最后多了一個(gè)[gim]*。這是正則表達(dá)式的三種匹配模式,也是屬于正則表達(dá)式的范疇,所以我們要匹配并獲取它。

代碼如下:

[\S\s]

最后一個(gè)是匹配所有上面沒(méi)有匹配到的字符,我們必須匹配到每一個(gè)字符。因?yàn)樗鼈兌夹枰鲆淮蜨TML轉(zhuǎn)義。

這樣,這個(gè)長(zhǎng)長(zhǎng)的正則就分析完了。下面是實(shí)現(xiàn)的例子。

代碼如下:

<style>body {font:14px/18px Consolas;}</style>

<script id="code">

//讀入當(dāng)前代碼

var code=document.getElementById("code").innerHTML;

//修正換行的瀏覽器差異,去掉頭尾的換行和空格

code=code.replace(/\r\n|[\r\n]/g,"\n").replace(/^\s+|\s+$/g,"");

//開(kāi)始主匹配

code=code.replace(/(\/\/.*|\/\*[.\s]+?\*\/)|((["'])(?:\\.|[^\\\n])*?\3)|\b(break|continue|do|for|in|function|if|else|return|switch|this|throw|try|catch|finally|var|while|with|case|new|typeof|instance|delete|void)\b|\b(Object|Array|String|Number|Boolean|Function|RegExp|Date|Math|window|document|navigator|location)\b|\b(true|false)\b|\b(null|undefined|NaN)\b|(?:[^\W\d]|\$)[\$\w]*|(0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE]\d+)?)|(?:[^\)\]\}]|^)(\/(?!\*)(?:\\.|[^\\\/\n])+?\/[gim]*)|[.\s]/g,function(){

var a,l,i,s;

a=arguments;

//循環(huán)匹配到的位置

for(i=1;i<=9;i++)if(s=a[i]){

s=htmlEncode(s);

//每個(gè)獲取匹配的位置都著上不同的顏色

switch(i){

case 1://注釋

return s.fontcolor("#998877").italics();

case 2:case 3://字符串

return s.fontcolor("#AA5544");

case 4://關(guān)鍵詞

return s.fontcolor("#333388");

case 5://內(nèi)置對(duì)象

return s.fontcolor("#5555AA");

case 6://布爾值

return s.fontcolor("#DD6600");

case 7://空值

return s.fontcolor("#BB4433");

case 8://數(shù)字

return s.fontcolor("#CC3322");

case 9://正則表達(dá)式

//這個(gè)比較特殊,匹配到的和獲取的有些不同

//匹配的時(shí)候,前面有個(gè)非獲取匹配,所以我們要保留非獲取匹配的部分

return htmlEncode(a[0]).replace(s,s.fontcolor("#33AA33"));

};

};

//沒(méi)有獲取匹配就直接轉(zhuǎn)義輸出

return htmlEncode(a[0]);

});

//輸出結(jié)果

document.write(code);

//HTML的轉(zhuǎn)義函數(shù)

function htmlEncode(e){

var i,s;

for(i in s={

"&":/&/g,""":/"/g,"'":/'/g,

"<":/</g,">":/>/g,"<br/>":/\n/g,

" ":/ /g," ":/\t/g

})e=e.replace(s[i],i);

return e;

};

</script>

由于今天在趕這篇文章,沒(méi)時(shí)間做這個(gè)代碼的優(yōu)化了。應(yīng)該還有很多小漏洞,不過(guò)整體思路就是這樣。這樣無(wú)論是JS還是其它什么語(yǔ)言,代碼高亮都可以直接正則匹配出來(lái)。

更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:如何實(shí)現(xiàn)正則表達(dá)式的JavaScript的代碼高亮
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn)

版權(quán)所有:易賢網(wǎng)

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美日韩小视频| 色综合久久久网| 国产嫩草影院久久久久| 欧美午夜一区二区三区| 9久草视频在线视频精品| 麻豆免费精品视频| 日本sm残虐另类| 日韩高清中文字幕一区| 亚洲一区二区精品久久av| 国产精品理伦片| 国产精品亲子伦对白| 国产女主播在线一区二区| 国产网站一区二区三区| 久久久青草青青国产亚洲免观| 欧美tk丨vk视频| 精品嫩草影院久久| 久久久另类综合| 国产蜜臀97一区二区三区| 欧美激情资源网| 一区在线中文字幕| 亚洲免费电影在线| 亚洲一级二级在线| 视频一区视频二区中文| 美女网站视频久久| 国产一区亚洲一区| 成人av动漫在线| 在线亚洲人成电影网站色www| 欧美在线高清视频| 日韩一二三区不卡| 久久精品亚洲精品国产欧美| 国产精品三级av在线播放| 国产不卡视频在线播放| 日韩精品一级中文字幕精品视频免费观看 | 欧美色倩网站大全免费| 成人免费va视频| 色婷婷久久久久swag精品 | 亚洲第一福利一区| 国产主播一区二区三区| www.99精品| 欧美tickling网站挠脚心| 9191精品国产综合久久久久久| 精品剧情在线观看| 国产精品理论在线观看| 日韩黄色一级片| 国产乱理伦片在线观看夜一区| 91色综合久久久久婷婷| 欧美一级久久久| 中文字幕亚洲在| 卡一卡二国产精品 | xfplay精品久久| 亚洲婷婷综合久久一本伊一区| 日韩高清一级片| 成人福利视频网站| 欧美一级一级性生活免费录像| 亚洲欧洲日产国码二区| 久久99久久99小草精品免视看| 91美女片黄在线观看| 亚洲精品在线观| 日韩精品三区四区| 日本韩国欧美在线| 中文字幕国产精品一区二区| 欧美a级理论片| 欧美精品色综合| 亚洲制服欧美中文字幕中文字幕| 国产精品自产自拍| 精品日韩在线一区| 丝袜美腿亚洲色图| 在线免费观看成人短视频| 欧美高清在线一区| 国产中文字幕精品| 欧美一二三区在线观看| 亚洲高清免费观看高清完整版在线观看| 成人免费视频视频| 国产日本亚洲高清| 国产一区二区免费看| 制服丝袜亚洲精品中文字幕| 亚洲精品精品亚洲| 99国产精品久久久| 国产精品久久久久影视| 丁香一区二区三区| 国产精品视频线看| 成人av免费网站| 国产精品久久看| 国产99精品在线观看| 国产欧美日韩三级| 成人综合在线视频| 中文字幕av不卡| 99re8在线精品视频免费播放| 国产精品沙发午睡系列990531| 国产成人综合网站| 欧美国产亚洲另类动漫| 成人黄页在线观看| 亚洲免费在线电影| 欧美亚洲国产一区二区三区| 亚洲愉拍自拍另类高清精品| 欧美影院一区二区三区| 天天操天天干天天综合网| 欧美三级电影在线观看| 日韩高清电影一区| 日韩欧美黄色影院| 狠狠色伊人亚洲综合成人| 久久久亚洲午夜电影| www.欧美.com| 亚洲一级不卡视频| 日韩片之四级片| 狠狠v欧美v日韩v亚洲ⅴ| 国产三区在线成人av| 91亚洲精品乱码久久久久久蜜桃| 亚洲免费观看高清完整版在线观看 | 亚洲地区一二三色| 欧美精品久久99| 韩国一区二区视频| 国产精品乱人伦中文| 欧美午夜精品理论片a级按摩| 午夜精品成人在线| 欧美一区二区三区系列电影| 久久精品二区亚洲w码| 国产欧美日韩卡一| 欧美日韩视频一区二区| 美日韩一区二区| 国产精品家庭影院| 欧美老肥妇做.爰bbww视频| 男男视频亚洲欧美| 中文字幕日韩精品一区 | 久久色在线观看| fc2成人免费人成在线观看播放 | 国产精品66部| 亚洲综合一区二区精品导航| 日韩美女视频一区二区在线观看| 99国内精品久久| 久久99国产精品久久| 欧美国产精品一区二区| 欧美日韩午夜影院| 国产精品资源网| 一区二区三区精品久久久| 精品久久久久久久久久久久久久久 | 国内成人精品2018免费看| **性色生活片久久毛片| 欧美一区二区三区日韩视频| 国产在线播精品第三| 亚洲成人一区在线| 国产精品伦理在线| 欧美一级二级在线观看| 在线观看日韩毛片| www.在线欧美| 激情五月播播久久久精品| 亚洲午夜一区二区| 国产欧美精品一区二区色综合| 欧美日韩成人一区| av成人免费在线| 国产大陆精品国产| 久久精品999| 一区二区在线观看av| 中文av一区二区| 久久美女高清视频| 777a∨成人精品桃花网| 91福利精品视频| av电影天堂一区二区在线观看| 国产精品影视在线观看| 国产自产视频一区二区三区| 香蕉久久夜色精品国产使用方法| 亚洲欧美日韩久久| 亚洲视频综合在线| 亚洲婷婷综合色高清在线| 国产精品大尺度| 久久午夜免费电影| 日韩精品中文字幕在线一区| 91超碰这里只有精品国产| 欧美色综合影院| 欧美日韩在线亚洲一区蜜芽| 欧美喷潮久久久xxxxx| 91精品国产免费| 欧美精品一区二区三区视频| 91麻豆精品91久久久久同性| 在线成人午夜影院| 精品久久久久久无| 中文av一区特黄| 亚洲精选视频在线| 婷婷中文字幕综合| 久久99精品久久久久久国产越南 | 亚洲va欧美va人人爽午夜| 性感美女久久精品| 日本成人在线一区| 久久av中文字幕片| 国产一区二区三区高清播放| 美国精品在线观看| 国产呦萝稀缺另类资源| 成人免费毛片片v| 91久久国产综合久久| 欧美吞精做爰啪啪高潮| 欧美一二三区精品| 精品国内二区三区| 国产精品日日摸夜夜摸av| 亚洲欧美二区三区| 欧美色偷偷大香| 日韩一级片在线观看| 精品动漫一区二区三区在线观看| 中文字幕第一页久久| 亚洲人成网站精品片在线观看| 7777精品伊人久久久大香线蕉经典版下载 |