六.【大侠】
这里所说的大侠,不是大家互相吹捧的“大侠”,而是实至名归的高手。这个级别的人完全有能力写出不差于Bindows/jQuery/Ext/YUI/Dojo的同等级别规模的前端开发框架。应用成熟的开发框架指导、解决问题。
- // 库文件 /mz/string/escapeReg.js
- /**
- * 在拼接正则表达式字符串时,消除原字符串中特殊字符对正则表达式的干扰
- * @author:meizz
- * @version: 2010/12/16
- * @param {String} str 被正则表达式字符串保护编码的字符串
- * @return {String} 被保护处理过后的字符串
- */
- mz.string.escapeReg = function (str) {
- return str.replace(new RegExp("([.*+?^=!:\x24{}()|[\\]\/\\\\])", "g"), "\\\x241");
- }
- // 库文件 /mz/url/delQuery.js
- /// include mz.string.escapeReg;
- /**
- * 删除URL字符串中指定的 Query
- * @author:meizz
- * @version:2010/12/16
- * @param {String} url URL字符串
- * @param {String} key 被删除的Query名
- * @return {String} 被删除指定 query 后的URL字符串
- */
- mz.url.delQuery = function (url, key) {
- key = mz.string.escapeReg(key);
- var reg = new RegExp("((\\?)("+ key +"=[^&]*&)+(?!"+ key +
- "=))|(((\\?|&)"+ key +"=[^&]*)+$)|(&"+ key +"=[^&]*)", "g");
- return url.replace(reg, "\x241")
- }
- // 应用实例
- /// include mz.url.delQuery;
- var str = "http://www.xxx.com/?pn=0"; // 删除指定字符 pn=0
- mz.url.delQuery(str, "pn");
自成体系,有基础,也有理论高度。知道为什么这样设计,也知道什么样的设计最好。比如这个例子可以有这样的封装:
- // 库文件 /mz/url/delQuery.js
- /// include mz.string.escapeReg;
- /**
- * 删除URL字符串中指定的 Query
- * @author:meizz
- * @version:2010/12/16
- * @param {String} url URL字符串
- * @param {String} key 被删除的Query名
- * @return {String} 被删除指定 query 后的URL字符串
- */
- String.prototype.delQuery = function ( key) {
- key = mz.string.escapeReg(key);
- var reg = new RegExp("((\\?)("+ key +"=[^&]*&)+(?!"+ key +
- "=))|(((\\?|&)"+ key +"=[^&]*)+$)|(&"+ key +"=[^&]*)", "g");
- return this.replace(reg, "\x241")
- }
- // 应用实例
- /// include mz.url.delQuery;
- var str = "http://www.xxx.com/?pn=0"; // 删除指定字符 pn=0
- str.delQuery("pn");
而为什么不采用下面的那种封装呢?经过了《知微》和《化蝶》你就懂了。
【进阶出路】
道法自然,从根上去寻找突破的契机。你可以研读HTML解析引擎设计与实现,JS解析引擎设计与实现,其它语言的代码解析与编译实现等等。



