正则匹配js代码高亮
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> <style> /* 高亮样式 */ * { font-size: 16px; font-family: microsoft yahei; } pre { word-break: break-all; word-wrap: break-word; width: 900px; background: #000; color: #D4D1D1; padding: 20px; } .com { color: #7F7979; } /* 注释 */ .comkey { color: #FFA500; } /* 注释标记 */ .str { color: #F6B846; } /* 字符串 */ .val { color: #03031B; } /* true|false|null|undefined|NaN */ .kwd { color: #CF3E3E; } /* 关键词 */ .obj { color: #22AD95; } /* 内置对象 */ .num { color: #6C05F7; } /* 数字 */ .reg { color: orange; } /* 正则 */ .func { color: green; } /* 函数 */ </style> </head> <body> <pre id="regdemon"> // 单行注释 /** * 多行注释 **/ var str1 = "123\"456"; var str2 = ‘123\‘456‘; var str3 = "123456"; var num = 123; var arr = [12, 12.34, .12, 1e3, 1e+3, 1e-3, 12.34e3, 12.34e+3, 12.34e-3, .1234e3]; var arr = ["12", "12.34", ‘.12, 1e3‘, ‘1e+3, 1e-3‘, ‘12.34e3, 12.34e+3, 12.34e-3‘, ".1234e3"]; var arr = [/12", "12.34/, /"12\/34"/]; for (var i=0; i<1e3; i++) { var node = document.getElementById("a"+i); arr.push(node); } function test () { return true; } test(); (function(window, undefined) { var _re_js = new RegExp(‘(\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/)|("(?:[^"\\\\]|\\\\[\\s\\S])*"|\‘(?:[^\‘\\\\]|\\\\[\\s\\S])*\‘)|\\b(true|false|null|undefined|NaN)\\b|\\b(var|for|if|else|return|this|while|new|function|switch|case|typeof|do|in|throw|try|catch|finally|with|instance|delete|void|break|continue)\\b|\\b(document|Date|Math|window|Object|location|navigator|Array|String|Number|Boolean|Function|RegExp)\\b|(?:[^\\W\\d]|\\$)[\\$\\w]*|(0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\\.\\d+(?:[eE][+-]?\\d+)?)|(?:^|[^\\)\\]\\}])(\\/(?!\\*)(?:\\\\.|[^\\\\\\/\\n])+?\\/[gim]*)|[\\s\\S]‘, ‘g‘); function prettify(node) { var code = node.innerHTML.replace(/\r\n|[\r\n]/g, "\n").replace(/^\s+|\s+$/g, ""); code = code.replace(_re_js, function() { var s, a = arguments; for (var i = 1; i <= 7; i++) { if (s = a[i]) { s = htmlEncode(s); switch (i) { case 1: //注释 com return ‘<span class="com">‘ + s + ‘</span>‘; case 2: //字符串 str return ‘<span class="str">‘ + s + ‘</span>‘; case 3: //true|false|null|undefined|NaN val return ‘<span class="val">‘ + s + ‘</span>‘; case 4: //关键词 kwd return ‘<span class="kwd">‘ + s + ‘</span>‘; case 5: //内置对象 obj return ‘<span class="obj">‘ + s + ‘</span>‘; case 6: //数字 num return ‘<span class="num">‘ + s + ‘</span>‘; case 7: //正则 reg return htmlEncode(a[0]).replace(s, ‘<span class="reg">‘ + s + ‘</span>‘); } } } return htmlEncode(a[0]); }); code = code.replace(/(?:\s*\*\s*|(?: )*\*(?: )*)(@\w+)\b/g, ‘ * <span class="comkey">$1</span>‘) // 匹配注释中的标记 .replace(/(\w+)(\s*\(|(?: )*\()|(\w+)(\s*=\s*function|(?: )*=(?: )*function)/g, ‘<span class="func">$1</span>$2‘) // 匹配函数 return code; } function htmlEncode(str) { var i, s = { //"&": /&/g, """: /"/g, "‘": /‘/g, "<": /</g, ">": />/g, "<br>": /\n/g, " ": / /g, " ": /\t/g }; for (i in s) { str = str.replace(s[i], i); } return str; } window.prettify = prettify; })(window); </pre> <script> (function(window, undefined) { var _re_js = new RegExp(‘(\\/\\/.*|\\/\\*[\\s\\S]*?\\*\\/)|("(?:[^"\\\\]|\\\\[\\s\\S])*"|\‘(?:[^\‘\\\\]|\\\\[\\s\\S])*\‘)|\\b(true|false|null|undefined|NaN)\\b|\\b(var|for|if|else|return|this|while|new|function|switch|case|typeof|do|in|throw|try|catch|finally|with|instance|delete|void|break|continue)\\b|\\b(document|Date|Math|window|Object|location|navigator|Array|String|Number|Boolean|Function|RegExp)\\b|(?:[^\\W\\d]|\\$)[\\$\\w]*|(0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\\.\\d+(?:[eE][+-]?\\d+)?)|(?:^|[^\\)\\]\\}])(\\/(?!\\*)(?:\\\\.|[^\\\\\\/\\n])+?\\/[gim]*)|[\\s\\S]‘, ‘g‘); function prettify(node) { var code = node.innerHTML.replace(/\r\n|[\r\n]/g, "\n").replace(/^\s+|\s+$/g, ""); code = code.replace(_re_js, function() { var s, a = arguments; for (var i = 1; i <= 7; i++) { if (s = a[i]) { s = htmlEncode(s); switch (i) { case 1: //注释 com return ‘<span class="com">‘ + s + ‘</span>‘; case 2: //字符串 str return ‘<span class="str">‘ + s + ‘</span>‘; case 3: //true|false|null|undefined|NaN val return ‘<span class="val">‘ + s + ‘</span>‘; case 4: //关键词 kwd return ‘<span class="kwd">‘ + s + ‘</span>‘; case 5: //内置对象 obj return ‘<span class="obj">‘ + s + ‘</span>‘; case 6: //数字 num return ‘<span class="num">‘ + s + ‘</span>‘; case 7: //正则 reg return htmlEncode(a[0]).replace(s, ‘<span class="reg">‘ + s + ‘</span>‘); } } } return htmlEncode(a[0]); }); code = code.replace(/(?:\s*\*\s*|(?: )*\*(?: )*)(@\w+)\b/g, ‘ * <span class="comkey">$1</span>‘) // 匹配注释中的标记 .replace(/(\w+)(\s*\(|(?: )*\()|(\w+)(\s*=\s*function|(?: )*=(?: )*function)/g, ‘<span class="func">$1</span>$2‘) // 匹配函数 return code; } function htmlEncode(str) { var i, s = { //"&": /&/g, "‘‘": /"/g, "‘": /‘/g, "<": /</g, ">": />/g, "<br>": /\n/g, " ": / /g, " ": /\t/g }; for (i in s) { str = str.replace(s[i], i); } return str; } window.prettify = prettify; })(window); var code = document.getElementById("regdemon"); code.innerHTML = prettify(code); </script> </body> </html>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。