程序员在编写代码的时候少不了和字符串以及“查询”打交道,两者的交集中有一个叫做正则表达式的的东西,这家伙用好了可以提高编程效率,用不好的话...你可以先去好好学一学。

  关于正则的使用,举个简单的例子:

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:

点击开始演示

博客园引入个js文件还真罗嗦,有时候会报XSS(跨站脚本攻击)相关的错误,(如果木有正常显示,刷新下试试)。

如果还是没有,可以看另外一个demo:SAE/highlight

跟着提示,下一步下一步多点几下,可以看出效果还是可以滴。主要是这里的正则略微的麻烦,处理一个色变得琢磨老半天。

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等都是对正则表达式的绝伦应用,很值得去看看源码,好好钻研人家都考虑了那些容易出错的点,源码都不长,两三百行。了解一个大概比较容易,但是当自己动手的时候总会发现很多细节问题处理不好,我那上面几个正则就倒弄了半天= =

另外一个配色方案,随便弄的,戳这里SAE/highlight。

正则表达式,用起来还是挺方便的。正则技能,你值得拥有~

玩转正则之highlight高亮相关推荐

  1. 【前端代码高亮】页面代码高亮展示之Highlight高亮组件应用详解,附多个主题效果

    [写在前面]作为前端开发的基本上都有接触这个高亮组件,这个也是目前被大家誉为最全面,体验最好的,所以针对数据展示型高亮显示我是力推这个的,但是我个人还是觉得还有不完美的地方,比如说一边输入一边高亮就不 ...

  2. highlight高亮风格

    highlight代码高亮的style有很多个,今天闲着没事,突然想看看各个style的效果.列在这里,以后想用的时候看看. ------------------------------------- ...

  3. Highlight(高亮)Gridview控件列

    一般情况之下,我们很轻易实现Gridview控件的行高亮,而想实现GridView控件的列高亮,是有点难度的.本博文也轻易教你实现GridView控件的列高亮. 在实现之前,我得准备数据,并绑定于网页 ...

  4. 玩转正则,成为正则表达式的大神!值得学习~~

    前言 正则表达式(regular expression)就是用一个"字符串"来描述一个特征,然后去验证另一个"字符串"是否符合这个特征. 正则表达式可以用来做什 ...

  5. js 正则练习之语法高亮

    js 正则练习之语法高亮 原文:js 正则练习之语法高亮 学了几天正则,差不多该总结整理写成果了,之前就想写语法高亮匹配来着,不过水平不够,看着例子都不理解. 今天就分析下 次碳酸钴 和 Barret ...

  6. 代码雨代码源复制_小程序基于Parser添加长按复制、代码高亮等功能

    程序员技术之旅网站/小程序/公众号进入小程序 功能展示 引入Parser 微信小程序中引入Parser可直接在GitHub项目主页(https://github.com/jin-yufeng/Pars ...

  7. 微信小程序怎么长按复制_微信小程序基于Parser添加长按复制、代码高亮等功能...

    功能展示 引入Parser 微信小程序中引入Parser可直接在项目主页查阅. 代码高亮 高亮插件 Prism官网下载prism.js和prism.css,默认只有css代码有渲染样式,注意选择需要渲 ...

  8. Element-ui导航组件NavMenu导航高亮设置

    Element-ui导航组件: NavMenu导航HighLight高亮设置 1. 文件navMenu.vue,部分代码参考: <template><div class=" ...

  9. Typora更改斜体字、加粗字、高亮、强调字等颜色

    Step 1 在Typora中打开其偏好设置,然后在外观的主题中选择打开主题文件夹,并选择正在使用的主题的css文件. Step 2 在css文件(以github.css为例)的末尾添加如下内容: / ...

最新文章

  1. 总结是学习最好的方式(转)
  2. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略
  3. Python入门记录
  4. 3DSlicer25:Report an Error
  5. linux查看fifo内容,linux 有名管道(FIFO)
  6. C++结构体多级排序的三种方法
  7. ODrive踩坑(四)AS5047P-SPI绝对值磁编码器,不需每次上电校准无刷电机,直接上电可用
  8. Django项目报错记录1
  9. 最大似然函数,琴生不等式
  10. uni-app真机运行app时报错:TypeError: Cannot read property ‘call’ of undefined
  11. PnL Explained FAQ
  12. 产品工作_技术与产品的异同
  13. 房屋装修(卫生间/浴室)
  14. Excel 表列序号
  15. Tkinter写一个音乐下载器
  16. Transform.RotateAround 围绕旋转
  17. 内存输出流ByteArrayOutputStream
  18. mix2刷android p教程,小米MIX2Android P使用谷歌相机教程
  19. Protobuf—简介,优缺点
  20. Coursera | Introduction to Data Analytics(IBM) | Quiz答案

热门文章

  1. SharePoint 2007图文开发教程(6)---实现Search Services
  2. Java 虚拟机总结给面试的你(中)
  3. 用Understand阅读 VS2010项目源码
  4. 翻身的废鱼——论PHP从入门到放弃需要多久?15
  5. SQLite的Pragma语句
  6. JavaScript获取DOM元素位置和尺寸大小
  7. oc 自定义导航栏背景
  8. Citrx XenDesktop 7 实施三 配置XenServer
  9. [转]Creating Unit Tests for ASP.NET MVC Applications (C#)
  10. New ADODB.Connection ADOX.Catalog 提示user-defined type not defined