Fork me on GitHub

12 Jun 2016

正则速查


常用元字符
符号 说明
. 匹配除换行符以外的任意字符。
\w 匹配字母或数字或下划线或汉字。
\s 匹配任意的空白符。
\d 匹配数字。
\b 匹配单词的开始或结束。
[ck] 匹配包含括号内元素的字符
^ 匹配行的开始。
$ 匹配行的结束。
\ 对下一个字符转义。比如$是个特殊 的字符。要匹配$的话就得用\$
| 分支条件,如:x|y匹配 x 或 y
反义元字符
符号 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符。
\S 匹配任意不是空白符的字符。等价于 [^ \f\n\r\t\v]。
\D 匹配任意非数字的字符。等价于 [^0-9]。
\B 匹配不是单词开头或结束的位置。
[^CK] 匹配除了CK以外的任意字符。
特殊元字符
符号 说明
\f 匹配一个换页符。等价于 \x0c 和 \cL
\n 匹配一个换行符。等价于 \x0a 和 \cJ
\r 匹配一个回车符。等价于 \x0d 和 \cM
\t 匹配一个制表符。等价于 \x09 和 \cI
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK
限定符
符号 说明
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。
{n} n 是一个非负整数。匹配确定的 n 次。
{n,} n 是一个非负整数。至少匹配n 次。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
懒惰限定符
符号 说明
*? 重复任意次,但尽可能少重复。
如 "acbacb" 正则 "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,
只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb" 。
+? 重复1次或更多次,但尽可能少重复。与上面一样,只是至少要重复1次。
?? 重复0次或1次,但尽可能少重复。如 "aaacb" 正则 "a.??b" 只会取到最后的三个字符"acb"。
{n,m}? 重复n到m次,但尽可能少重复。如 "aaaaaaaa" 正则 "a{0,m}" 因为最少是0次所以取到结果为空
{n,}? 重复n次以上,但尽可能少重复。如 "aaaaaaa" 正则 "a{1,}" 最少是1次所以取到结果为 "a"
捕获分组
符号 说明
(exp) 匹配exp,并捕获文本到自动命名的组里。
(?exp) 匹配exp,并捕获文本到名称为name的组里。
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号以下为零宽断言。
(?=exp) 匹配exp前面的位置。
如 "How are you doing" 正则"(?.+(?=ing))" 这里取ing前所有的字符,
并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为"How are you do";
(?<=exp) 匹配exp后面的位置。
如 "How are you doing" 正则"(?(?<=How).+)" 这里取"How"之后所有的字符,
并定义了一个捕获分组名字为 "txt" 而"txt"这个组里的值为" are you doing";
(?!exp) 匹配后面跟的不是exp的位置。如 "123abc" 正则 "\d
(?<!exp) 匹配前面不是exp的位置。
如 "abc123 " 正则 "(?<![0-9])123" 匹配"123"前面是非数字的结果也可写成"(?!<\d)123"

牛刀小试一下下,常用正则Query封装

var regex = window.regex || (function (document, $) {
    var _reg = {};
    /* 'pwd':/^[\@A-Za-z0-9\!\#\$\%\^\&\*\.\~]{6,16}$/,//密码 */
    //验证数字
    $.extend(_reg, {
        'num': /^\d+$/, //数字
        'znum': /^[1-9](\d+)?$/, //  大于0的数字
        'float': /^[-]{0,1}(\d+)[\.]+(\d+)$/, //浮点数
        'money': /^\d{1,12}(?:\.\d{1,3})?$/, // money
        'idCard': /^\d{15}$|^\d{18}$|^\d{17}[xX]$/, //身份证
        'idCardStrict':/^(\d{6})([1-2])(\d{3})((?:0[1-9])|(?:1[0-2]))((?:0[0-9])|(?:[1-2][0-9])|(?:3[0-1]))(\d{3})(\d{1})$/,
        'qq': /^[1-9]\d{4,15}$/, //QQ
        'pwd': /^[\@A-Za-z0-9]{6,16}$/, //密码
        'areacode': /^(0[1,2]{1}\d{1})$|^(0[3-9]{1}\d{2})$/, //区号
        'tel': /^\d{7,8}$/, // 固话格式
        'mobile': /^((\+86)|(\(\+86\)))?-?(13|14|15|18|17)[0-9]{9}$/, //验证手机号码
        'telephone': /^(((\+)?86)|(\(\+86\)))?-?((((0)?[1,2]{1}\d{1})?-?\d{8})|((0[3-9]{1}\d{2})?-?\d{7,12}))-?(\d{1,8})?$/, //验证固定电话
        'phone': /^((\+86)|(\(\+86\)))?-?(13|14|15|18|17)[0-9]{9}$|^((\+86)|(\(\+86\)))?-?(((0[1,2]{1}\d{1})?-?\d{8})|((0[3-9]{1}\d{2})?-?\d{7,8}))$/, //手机号码和固定电话
        'zipcode': /^\d{6}$/ //验证邮编
    });
    //验证字符串
    $.extend(_reg, {
        'email': /^\w{1,16}([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, //邮箱
        'chinese': /^[\u4E00-\u9FA5]+$/, //仅汉字
        'char': /^[A-Za-z]+$/, //仅仅是字母
        'charn': /^[A-Za-z0-9]+$/, //数字加字母
        'nospecial': /^[\u4E00-\u9FA5A-Za-z0-9]+$/, // 不包含特殊字符
        'url': /^((http|https|ftp):\/\/)?(\w(\:\w)?@)?([0-9a-z_-]+\.)*?([a-z0-9-]+\.[a-z]{2,6}(\.[a-z]{2})?(\:[0-9]{2,6})?)((\/[^?#<>\/\\*":]*)+(\?[^#]*)?(#.*)?)?$/,
        'loginName': /^(13|14|15|18|17)[0-9]{9}$|^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/, // 用户名
        'userName': /^[\u4e00-\u9fa5]{2`,4}$|[a-zA-Z]{4,20}$/, //真实姓名
        'nickName': /^([a-zA-Z\u4e00-\u9fa5]{1}[a-zA-Z0-9_\u4e00-\u9fa5]{3,19})$/ //昵称
    });
    return _reg;
})(document, window.jQuery);
window.regex = regex;