`
zui4yi1
  • 浏览: 2775 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

二类正则表达式的优化写法

 
阅读更多

      只讨论验证方面的。
    首先,验证方法可有二种,正则的test和String的
search,选用哪个?显然选用test好,使用search的一定是没去对比的或拷贝代码的。
    其次,讨论验证思路。正常的验证思路是:先验证是否完全匹配,否就提示错误。写法上,就是以^开头,然后以+$或*$或?$结尾。如果用逻辑表达式写即^(p),
而^(p) = (^p),那么,(^p)表示的是什么验证思路呢?

      只要找到不符合的,那么就提示错误。这种验证思路的写法,可以避免^+*?$等量词的使用。用例子来做说明吧,方便对比。比如验证只能输入数字:

 

//正常思维的写法
var exp = new RegExp();
exp = /^\d+$/;   
if( !exp.test("2a2") ){
    alert("只能输入数字");
    return false;
}
//逆向思维的写法
exp = /\D/;
if( exp.test("2a2") ){  //注意无感叹号
    alert("只能输入数字");
    return false;
}

 这个例子可以很清晰的说明区别了,从写法上看:逆向写法很简洁,没有+*?等数量量词,没有$结尾量词,一般也没有^开头量词(多条件的除外),并且if验证中,不再用""判断。下面再举几个例子,就更好看出逆向写法的简洁性了。为了简洁,不再写出if判断: 

 

//只能输入数字:
exp = /^[0-9]+$/;  //入门级的菜鸟写法
exp = /^\d+$/;  //使用量词的写法 
exp = /\D/;	//改进

//只能字母
exp = /^[a-zA-Z]+$/; //一般写法
exp = /[^a-zA-Z]/;	//改进

//只能输入单词字符(字母数字或_)
exp = /^[a-zA-Z0-9\_]+$/	//入门级的菜鸟写法
exp = /^\w+$/;	//使用量词的写法
exp = /\W/;	//改进

//只能输入单词字符(字母数字或_),并且不以数字开头
exp = /^[a-zA-Z]\w*$/;	//一般写法
exp = /\W|^\d/;	//改进

         看出逆向写法的简洁性了吧?对此我进行了一些总结,不过发现,逆向写法的适用范围郁闷不大哎!像邮箱地址等某位必须固定的有顺序问题的多条件的正则表达式,用逆向写法反而可能会变得非常复杂了!如果不考虑顺序问题:^(pq)=(^p)|(^q)(三个或三个以上的省略)还可以接受,而如果考虑顺序问题(比如邮箱地址@有顺序问题),那几乎都不可写了!像上面的最后一个例子,如果所有条件都可以转为简单的量词,那么可以进行优化,如果不是,那就不要使用逆向写法了。当然,用逆向写法写多条件的表达式,阅读上也会引起理解上的问题。故:单条件的正则,或可转为简单量词的多条件正则,均可优化为逆向写法!

 

 

编辑了下,添加了附件,经理说总结的东西都写成ppt方便培训和交流。

 

分享到:
评论

相关推荐

    正则表达式中环视的简单应用示例【基于java】

    ”,很明显第一个s是粘度的单位,第二s是时间单位,现在需要将文本中所有表示时间的s替换为“秒”,在朋友指引下,发现通过正则表达式中的环视可以方便实现这功能。 正则表达式中的环视,大家公认的基本原理是依据...

    IIS服务器SSI(rewrite重写)插件的帮助资料

    ISAPI_Rewrite 是一款适用于IIS的功能强大的基于正则表达式的URL处理模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把配置从appach移植到IIS中或者从IIS移值到appach中变成可能。请参阅3.2...

    算法 第4版-谢路云译-带完整书签

    5.4.6 构造与正则表达式对应的NFA 522 5.5 数据压缩 529 5.5.1 游戏规则 529 5.5.2 读写二进制数据 530 5.5.3 局限 533 5.5.4 热身运动:基因组 534 5.5.5 游程编码 537 5.5.6 霍夫曼压缩 540 第6章...

    算法-第4版-完整版

    5.4.1 使用正则表达式描述模式 514 5.4.2 缩略写法 516 5.4.3 正则表达式的实际应用 517 5.4.4 非确定有限状态自动机 518 5.4.5 模拟NFA的运行 520 5.4.6 构造与正则表达式对应的 5.5 数据压缩 ...

    算法 第4版 高清中文版

    5.4.1 使用正则表达式描述模式 514 5.4.2 缩略写法 516 5.4.3 正则表达式的实际应用 517 5.4.4 非确定有限状态自动机 518 5.4.5 模拟NFA的运行 520 5.4.6 构造与正则表达式对应的 5.5 数据压缩 529 5.5.1 ...

    《算法》中文版,Robert Sedgewick,塞奇威克

    编辑推荐  Sedgewick之巨著,与...5.4.6 构造与正则表达式对应的 5.5 数据压缩 5.5.1 游戏规则 5.5.2 读写二进制数据 5.5.3 局限 5.5.4 热身运动:基因组 5.5.5 游程编码 5.5.6 霍夫曼压缩 第6章 背景 索引

    算法,4th,塞奇威克 (Robert Sedgewick)韦恩 (Kevin Wayne), 谢路云 译.azw3

    算法,4th,塞奇威克,中文版 ...5.4.6 构造与正则表达式对应的NFA 5.5 数据压缩 5.5.1 游戏规则 5.5.2 读写二进制数据 5.5.3 局限 5.5.4 热身运动:基因组 5.5.5 游程编码 5.5.6 霍夫曼压缩 第6章 背景 索引

    组合框城市联动的另一种写法类_json-易语言

    原帖采用正则表达式,还带上自定义数据类型 这里用类_json方法实现一样的效果 仅用到 精易模块 ,请自行添加 新手不会json的可以参考一下 简单源码,会json的可以略过

    Java基础知识点总结.docx

    二十、 正则表达式:其实是用来操作字符串的一些规则★★★☆ 135 二十一、 设计模式★★★★★ 136 设计模式简介 136 单例设计模式:★★★★★ 156 工厂模式★★★★★ 159 抽象工厂模式★★★★★ 163 建造者模式...

    magento开发教程

    8.2.1第一种方法:正则表达式匹配 69 8.2.2第二种方法:同名模块整个覆盖。 72 8.2.3第三种方法:单独重写指定的Action。 73 8.3重写Magento模型 (Model) 74 8.3.1重写Model 75 8.3.2重写资源模型Entity Model 77 ...

    asp.net知识库

    ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证...

    精易模块[源码] V5.15

    2、修正“正则元字符转义”子程序,对应个别替换符错误的BUG,感谢易友【@墨雨千寻】反馈。 3、改善“进程_枚举”处理效率,由易友【@御风软件】提供方案。 4、新增“窗口_是否被遮挡”,判断一个窗口是否被置顶窗口...

    Java学习笔记-个人整理的

    {3.4}正则表达式}{71}{section.3.4} {3.5}StringBuffer}{75}{section.3.5} {3.6}StringBuilder}{76}{section.3.6} {3.7}StringBuilder与StringBuffer的缺点}{76}{section.3.7} {3.8}内部类}{77}{section.3.8} ...

    powerbuilder

    PrintDefineFont() 功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。 语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline) ...

Global site tag (gtag.js) - Google Analytics