[技术学习]正则表达式分析

jquery源码学习中,发现大量正则表达式的使用,因此在此对常用正则表达式进行分解,并举例他们的匹配规则

一、匹配常用的数字格式,包括正负整数小数以及可以计数法
core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,// Used for matching numbers

  1、[+-]? 表示第一位为+或-号,也可以没有

  2、(?:\d*\.|) :使用?:表示分组不会被捕捉,有0到多个数字,一个小数点,|表示匹配空.,即匹配12.格式或者空

  3、\d+ :表示1到多个数字

  4、(?:[eE][+-]?\d+|) 表示分组不被捕捉,匹配e或者E,0-1个+-号,多个数字,表示匹配e+3格式或者空

可以进行匹配数字格式,由于以.source为标记,得到为备份字符串,可以与其他字符串组成完整的正则,进行使用,主要使用为:,举例说明:

    var core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,// Used for matching numbers
        rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),//^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(.*)$
        rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),//^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$
        rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),

        rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
    var core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,// Used for matching numbers
        ///^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(.*)$
        //可以将数字与其他字符进行分离,例如:100px,分离为100和px
        rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
        //^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$
        //匹配非px结尾的字符
        rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
        ///^([+-])=([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))/i
        rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
        ///^(?:([+-])=|)([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))([a-z%]*)$/i
        rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" );

        var width=‘100px‘;
        alert(width.match(rnumsplit));//[‘100px‘,‘100‘,‘px‘]
        alert(width.match(rnumnonpx));//null

        var aa="+=100.12"
        alert(rrelNum.exec(aa));//[‘+=100.12‘,‘+‘,‘100.12‘]
        var core_pnum = /^[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)$/;//
        var num1=1.0034e-18;
        alert(core_pnum.exec(num1))//1.0034e-18 

        var num2=43.12
        alert(core_pnum.exec(num2))//43.12

        var num3=43
        alert(core_pnum.exec(num3))//43

二、非空字符,全局匹配

  core_rnotwhite = /\S+/g,

使用环境为,进行字符串切割,将所有字符串按字符进行转化为数组:

        var core_rnotwhite = /\S+/g,
            str=‘one two three‘;
        alert(str.match(core_rnotwhite))//[‘one‘,‘two‘,‘three‘]

三、全局匹配左侧或者右侧空格

  rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g

    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
        aa=‘       aaa         ‘ ;
    ;
    alert("1"+aa.replace(rtrim,‘‘)+"1");//1aaa11

四、匹配html标签或者id选择器#xxx

rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

五、匹配单独的html标签
rsingleTag= /^<(\w+)\s*\/?>(?:<\/\1>|)$/,

六、匹配由],:{}以及任意字符组成的字符串,json常用字符串
rvalidchars = /^[\],:{}\s]*$/,

七、
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,

// Matches dashed string for camelizing
rmsPrefix = /^-ms-/,
rdashAlpha = /-([\da-z])/gi,

时间: 2024-10-21 13:45:09

[技术学习]正则表达式分析的相关文章

我的2015技术学习流水账

我的2015技术学习流水账 2015年马上就要过去了,匆匆忙忙地又是一年.回头总结整理,发现这一年还挺充实的.在正常上班工作之余,学习到了不少新东西,不禁感到很欣慰!一个多月前就开始写,终于赶在2016年来临之前写完了这篇文章-- 关于本文,尽管叫做流水账,但是出于程序员条理性的"强迫症",还是进行系统分类,分类方法参照Thoughtworks技术雷达的Tecniques.Languages & Frameworks.Tools.Platforms,将其中的Tecniques改

EMV技术学习和研究(转)

刚开始学习EMV&PBOC,磕磕碰碰,感谢xuture的<EMV技术学习和研究>给了很大帮助,让我少走了很多弯路,也感谢广俊.surge.艾零.小SO.Spinach.龙行天下的帮助,尤其要感谢广俊!!! 分享也收藏<EMV技术学习和研究>链接: EMV技术学习和研究(一)开篇 EMV技术学习和研究(二)应用选择 EMV技术学习和研究(三)应用初始化&&读应用数据 EMV技术学习和研究(四)脱机数据认证之SDA EMV技术学习和研究(五)脱机数据认证之DDA

Linux技术学习要点,您掌握了吗---初学者必看

Linux技术学习要点,您掌握了吗---初学者必看 1.如何做好嵌入式Linux学习前的准备? 要成为一名合格的嵌入式Linux工程师,就需要系统的学习软.硬件相关领域内的知识,需要在最开始就掌握开发的规范和原则,养成良好的工作习惯.为了确保学习的效果,信盈达安排的整个课程体系是非常集中.高效的,这就要求准备参加嵌入式Linux就业课程学习的同学要调整好自己的时间,务必要确保在4个多月的学习时间内能够高度集中精力.兄弟连Linux培训. 在整个集中学习过程中,既要保证课上认真听讲.实战演练的时间

技术学习规划

技术学习规划: ? 2015年 2016年 2017年 基础理论 TCP/IP协议: ? ? ? ? ? ? ? ? ? ? ? ?<TCP/IP详解卷I>(第1遍) ? ? ? ? ? ? ? ? ? ? ? ?<图解TCP/IP>. 数据结构与算法: ? ? ? ? ? ? ? ? ? ? ? ? ?<算法> TCP/IP协议: ? ? ? ? ?<TCP/IP详解卷I>(第2遍) ? ? ? ? ? HTTP协议:<图解HTTP> 数据结构

Java多线程技术学习笔记(二)

目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和wait的区别 停止线程的方式 守护线程 线程的其他知识点 一.线程间的通信示例 返目录回 多个线程在处理同一资源,任务却不同. 假设有一堆货物,有一辆车把这批货物往仓库里面运,另外一辆车把前一辆车运进仓库的货物往外面运.这里货物就是同一资源,但是两辆车的任务却不同,一个是往里运,一个是往外运. 下面

轻松学习正则表达式

转载自:http://www.cnblogs.com/jamesping/articles/2252675.html 装载自:http://www.cnblogs.com/sxwgf/archive/2011/11/17/2252076.html 继续把我在个人博客上新翻译的文章投递到博客园来,这次是有关正则表达式的,很基础,主要是让读者把握住正则表达式中的3种括号的用法,用这3种括号几乎可以涵盖所有的正则式. 写在最前面 前两天我从CodeProject上翻译了一篇关于Javascript的文

技术学习的困惑与时间管理

做为一名IT人士,在技术学习的过程中总是会遇到很多的问题.这里就从我所会的技术为例,说一说怎么才能够更有效的去学习及时间管理. 我是怎么学习PON 的 大家先不用去管PON是一门什么技术,如果能够遇到这样的设备.最好能够亲手去调测一番,然后调测的多了,你就会发现,开通,调试没有什么难的.这时候,就开始要捉摸是否能有更省时省力的办法.因为人都是想要偷懒的.所以就开始写快速开局脚本. 再过一段时间,发现所遇到的故障都有了一套自己的思路.这时,就开始尝试着用文字来记录所遇到过的故障.想尽一切办法,图文

java技术学习步骤

java技术学习步骤 ? 一.入门 二.基础巩固 三.深入学习 四.源码剖析 五.总结分析 语言基础 <java核心技术卷I> <java编程思想> <java核心技术卷II> <Effective java > <java 特种兵> ? ? 框架技术 Struts2:<深入浅出Struts2> ? ? ? ? ? ? ?<Strut2实战> Hibernate:<精通Hibernate> Spring:<

技术学习步骤

java技术学习步骤 ? 一.入门 二.基础巩固 三.深入学习 四.源码剖析 五.总结分析 语言基础 <java核心技术卷I> <java编程思想> <java核心技术卷II> <Effective java > <java 特种兵> ? ? 框架技术 Struts2:<深入浅出Struts2> ? ? ? ? ? ? ?<Strut2实战> Hibernate:<精通Hibernate> Spring:<