gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

如何實現正則表達式的JavaScript的代碼高亮

今天想改一下JS的高亮的配色,憋了一下午憋出了這個這個正則表達式。
  下面這老長老長了的玩意兒是個正則表達式,看到了別嚇壞了。

復制代碼 代碼如下:
/(//.*|/*[Ss]+?*/)|(([“‘])(?:\.|[^\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|(?:[^Wd]|$)[$w]*|(0[xX][0-9a-fA-F]+|d+(?:.d+)?(?:[eE]d+)?)|(?:[^)]}]|^)(/(?!*)(?:\.|[^\/n])+?/[gim]*)|[Ss]/g

  現在,我們可以來慢慢分析它。仔細看這個正則表達式你會發現,它們是很多個正則表達式用|連接起來的。現在,我們把它用|分割,逐個分析。

復制代碼 代碼如下:
(//.*|/*[Ss]+?*/)

  這是第二個,這個正則表達式是用來匹配字符串的。字符串可以在單引號和雙引號中,所以我們匹配這兩個的任意一個。這里需要用一個括號把它括起來表示它是一個獲取匹配(“獲取匹配”的“獲取”是名詞),因為在結束的地方還需要匹配這個字符。在匹配字符串結束的地方可以用后向引用3來匹配字符串開始的字符,也就是開始時的引號種類。如果你從這整個正則表達式的開頭開始數,你就會發現[“‘]外面的括號是整個正則表達式中的第三個獲取匹配。這就是字符串的頭尾部分,中間的部分由于字符串是可以包含轉義的,所以我們一旦遇到反斜杠就直接跳過它后面那個字符,因為反斜杠后面包含的是轉義。但是這僅僅是匹配轉義,所以我們要用或運算|連接一個匹配非轉義的表達式,那就是[^\]。可是這個是匹配非反斜杠的任何字符,它可以包含換行,而JS中的字符串是不允許寫成換行的。所以我們需要加個n讓它不匹配換行。由于我們使用了或來連接,而或的優先級非常低,所以需要在旁邊加上括號來修正優先級。如果使用普通的括號就會占用一個獲取匹配,所以我們要使用(?:)來完成一個非獲取匹配。

復制代碼 代碼如下:
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個,這些只是匹配一些關鍵字,由于需要的顏色不同所以被分組了。這沒什么好說的,跳過。

復制代碼 代碼如下:
(?:[^Wd]|$)[$w]*

  這是第七個,它的作用是匹配普通的變量名。如果變量名的字符不消耗掉,后面匹配數字的就有可能會把變量名中的數字匹配輸出來。所以這一步是必須的。你會發現這一步沒有任何獲取匹配,因為變量名的顏色是默認顏色,我們不獲取它。根據JS的命名規則,變量名是不能以數字開頭的,所以我們用[^Wd]|$匹配一個變量的開頭。后面則可以匹配數字、字母、下劃線、美元符號,任意次。這樣變量名就被消耗掉了。

復制代碼 代碼如下:
(0[xX][0-9a-fA-F]+|d+(?:.d+)?(?:[eE]d+)?)

  這是第八個,匹配數字的。由于數字的表達方式有兩種,所以我們要分開寫。|的左邊是16進制的數字寫法。右邊是普通的數字寫法,這個可以包含小數和科學計數法。由于小數和科學計數法都是可選存在的,所以我們把它括號起來,后面加上問號作為可選匹配。

復制代碼 代碼如下:
(?:[^)]}]|^)(/(?!*)(?:\.|[^\/n])+?/[gim]*)

  這是第九個,匹配正則表達式的。前面有個非獲取匹配,匹配非括號的結束。因為如果存在括號,那么斜桿就有可能表示的是除號而不是正則表達式了。后面就是正則表達式的匹配,和字符串的匹配類似,只不過最后多了一個[gim]*。這是正則表達式的三種匹配模式,也是屬于正則表達式的范疇,所以我們要匹配并獲取它。

復制代碼 代碼如下:
[Ss]

  最后一個是匹配所有上面沒有匹配到的字符,我們必須匹配到每一個字符。因為它們都需要做一次HTML轉義。
  這樣,這個長長的正則就分析完了。下面是實現的例子。

復制代碼 代碼如下:
<style>body {font:14px/18px Consolas;}</style>
<script id=”code”>
//讀入當前代碼
var code=document.getElementById(“code”).innerHTML;
//修正換行的瀏覽器差異,去掉頭尾的換行和空格
code=code.replace(/rn|[rn]/g,”n”).replace(/^s+|s+$/g,””);
//開始主匹配
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|(?:[^Wd]|$)[$w]*|(0[xX][0-9a-fA-F]+|d+(?:.d+)?(?:[eE]d+)?)|(?:[^)]}]|^)(/(?!*)(?:\.|[^\/n])+?/[gim]*)|[.s]/g,function(){
  var a,l,i,s;
  a=arguments;
  //循環匹配到的位置
  for(i=1;i<=9;i++)if(s=a[i]){
    s=htmlEncode(s);
    //每個獲取匹配的位置都著上不同的顏色
    switch(i){
      case 1://注釋
      return s.fontcolor(“#998877”).italics();
      case 2:case 3://字符串
      return s.fontcolor(“#AA5544”);
      case 4://關鍵詞
      return s.fontcolor(“#333388”);
      case 5://內置對象
      return s.fontcolor(“#5555AA”);
      case 6://布爾值
      return s.fontcolor(“#DD6600”);
      case 7://空值
      return s.fontcolor(“#BB4433”);
      case 8://數字
      return s.fontcolor(“#CC3322”);
      case 9://正則表達式
      //這個比較特殊,匹配到的和獲取的有些不同
      //匹配的時候,前面有個非獲取匹配,所以我們要保留非獲取匹配的部分
      return htmlEncode(a[0]).replace(s,s.fontcolor(“#33AA33”));
    };
  };
  //沒有獲取匹配就直接轉義輸出
  return htmlEncode(a[0]);
});

//輸出結果
document.write(code);

//HTML的轉義函數
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>

  由于今天在趕這篇文章,沒時間做這個代碼的優化了。應該還有很多小漏洞,不過整體思路就是這樣。這樣無論是JS還是其它什么語言,代碼高亮都可以直接正則匹配出來。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
亚洲图片 自拍偷拍| 凹凸日日摸日日碰夜夜爽1| av网址在线观看免费| 大陆极品少妇内射aaaaa| 欧美国产日韩激情| 免费看国产曰批40分钟| 日日橹狠狠爱欧美超碰| 人妻有码中文字幕| 欧美视频免费播放| 黑人粗进入欧美aaaaa| 亚洲一区在线不卡| 手机福利在线视频| 97中文字幕在线| 国产在线青青草| 成人性生交免费看| 香蕉视频在线网址| 成人免费观看cn| 一区二区在线播放视频| 久久精品一二三四| 欧美视频在线观看网站| 538在线视频观看| 亚洲制服在线观看| 被灌满精子的波多野结衣| 欧美精品一区免费| www.色欧美| 男人添女荫道口图片| 精品999在线| 国产天堂视频在线观看| 激情五月亚洲色图| 久久久久亚洲av无码专区喷水| 天堂8在线天堂资源bt| 九九九在线观看视频| 国产一区一区三区| 日韩精品无码一区二区三区免费 | 91精品国产三级| 91午夜在线观看| 五月天开心婷婷| 黄色a级片免费| 国产精品88久久久久久妇女| 国产又黄又猛视频| 日本福利视频网站| 欧美在线a视频| 超碰在线97免费| 99热在线这里只有精品| 91免费网站视频| 自拍偷拍21p| 情侣黄网站免费看| 丰满少妇久久久| 欧美 亚洲 视频| 浴室偷拍美女洗澡456在线| 性欧美1819| 国产理论在线播放| 超碰影院在线观看| 97国产精东麻豆人妻电影| 黄色一级大片免费| 日本美女爱爱视频| 日本三级中文字幕在线观看| www.色.com| 成年人免费观看的视频| 一区二区三区 欧美| 波多结衣在线观看| 最新国产黄色网址| 亚洲一级片网站| www午夜视频| 91精品视频国产| 黄黄视频在线观看| youjizz.com在线观看| 日韩精品久久一区二区| 蜜臀精品一区二区| 日韩在线视频在线观看| 69堂免费视频| 成人在线观看黄| 中文字幕亚洲欧洲| 国产四区在线观看| 国产精品久久久久久久乖乖| 日本手机在线视频| 日韩免费一级视频| 国产一级片黄色| 亚洲国产成人va在线观看麻豆| 亚洲精品久久久久久宅男| 久久综合在线观看| 日本黄色片一级片| 欧美激情精品久久久久久小说| 亚洲最大综合网| 国产日韩第一页| 免费激情视频在线观看| 污视频网站观看| 欧美成人精品免费| 黄色三级视频片| 台湾无码一区二区| 日本三区在线观看| 日韩中文在线字幕| 九一精品在线观看| 99中文字幕在线观看| aaa毛片在线观看| 五月天综合婷婷| 欧美午夜性生活| 亚洲精品少妇一区二区| 黄色片视频在线| 久久99久久99精品| 一区二区三区四区毛片| 国产中文字幕免费观看| 免费看污污视频| 亚洲娇小娇小娇小| 男人日女人bb视频| 中文字幕黄色大片| 少妇高潮喷水在线观看| av不卡在线免费观看| 老熟妇仑乱视频一区二区| 日韩国产小视频| 国产高清免费在线| 911福利视频| 色婷婷狠狠18| 日韩欧美精品在线观看视频| 成年人视频网站免费| 午夜啪啪免费视频| 国产一伦一伦一伦| 日韩一级片播放| 无码人妻丰满熟妇区五十路百度| 2021狠狠干| 国产日韩欧美大片| 粉嫩av一区二区三区天美传媒| 奇米视频888| 天堂av手机在线| 日本特黄a级片| 老司机久久精品| 亚洲午夜精品一区| 男女污污视频网站| 艳母动漫在线免费观看| www.亚洲自拍| 国产欧美123| 精品少妇人欧美激情在线观看| 欧美日韩dvd| 精品国产av无码一区二区三区| 精品一区二区成人免费视频| 樱空桃在线播放| 永久免费网站视频在线观看| 毛片在线视频观看| 五月天在线免费视频| 黄色网在线视频| 无码播放一区二区三区| 国产二区视频在线播放| 少妇网站在线观看| www.51色.com| 日韩成人三级视频| 国产淫片av片久久久久久| 日韩欧美国产片| 国产精品一二三在线观看| 乱人伦xxxx国语对白| 欧美伦理视频在线观看| 久久久国产精华液999999| 99热都是精品| 国产三区在线视频| 亚洲欧美天堂在线| 国产玉足脚交久久欧美| 99热手机在线| 天堂а√在线中文在线| 国语对白做受xxxxx在线中国| 午夜两性免费视频| 妞干网在线播放| 男女视频在线看| 日本十八禁视频无遮挡| 亚洲免费在线播放视频| 国产特级淫片高清视频| 最新免费av网址| 蜜臀av午夜一区二区三区| 国产91porn| 麻豆三级在线观看| 老子影院午夜伦不卡大全| www.se五月| 粉嫩虎白女毛片人体| 黑人巨茎大战欧美白妇| 久久久久久蜜桃一区二区| 九九九九免费视频| mm131午夜| www.成人黄色| 激情黄色小视频| 手机看片福利日韩| 日韩欧美亚洲天堂| 成人在线免费观看视频网站| 国产女同无遮挡互慰高潮91| 一本大道熟女人妻中文字幕在线| 粉嫩av一区二区三区天美传媒| 999这里有精品| 8x8x最新地址| 亚洲不卡视频在线| 免费av网址在线| 黄色a级片免费| 每日在线更新av| 鲁一鲁一鲁一鲁一澡| 免费人成自慰网站| 欧洲精品在线播放| 97av中文字幕| 久久av综合网| 亚洲人成无码网站久久99热国产| 欧美日韩dvd| 日韩极品视频在线观看| 中国一级黄色录像| 400部精品国偷自产在线观看| 看全色黄大色大片|