全面了解JS中的正则表达式

2017-04-17  本文已影响434人  108N8
正则:就是操作字符串
1. 字符串操作
    str.split(); //分割
    str.toLowerCase(); //转小写
    str.toUpperCase(); //转大写
    str.charAt();//下标
    str.subString(1,2);//截取字符串(包含起始,不包含结束)
    str.indexOf();//查找下标
    str.lastIndexOf(); //从后面往前找
    str.charCodeAt();//转unicode
    string.fromCharCode();//将Unicode转为字符
    str.replace();
    str.slice() //跟substring类似
2. 数组操作
    arr.splice(起始位置,n);//起始位置开始(从0开算),删除n个
    arr.slice(起始位置,结束位置);//起始位置开始“截取(不是删除)”,m-n个,不影响数组本身
    例:var arr1 = [1,2,3,4,5];
                arr1.splice(1,2);//23         arr1.splice(2,2);//34
                alert(arr1);//145             alert(arr1);//125
            var arr2 = [1,2,3,4,5];
                arr2.slice(1,2);//2  一个      alert(arr2.slice(2,2));//空
                alert(arr2);//12345            alert(arr2);//12345
3. 正则
正则:
    1.方便
    2.性能极高
什么是正则:正则就是一套规则
    全称:正则表达式(规则表达式)
创建:
    var reg=new RegExp(); regular expression :正则表达式
        new RegExp('表达式','选项');
    str.search(正则); 查找,只找第一次出现的位置,返回出现的位置
    JS风格:new RegExp('','');
    Perl风格:/a/i;

match:匹配
    str.match();//
        匹配出来的是一个数组,找不到返回null
        把符合的全部提取出来

str.replace(正则,添加的对象);
js或者|| 
正则的或者 |

选项: 
i:ignore 忽略大小写
g:global 全局
m:mutil-line 多行
选项不区分先后。
^行首   =>  ^不配合m,代表整个字符串的开头
       =>   ^配合m,会识别字符串换行
$行尾  =>

方括号:
1.[q,a,s] 代表 q|a|s
2./q[acd]c/  代表qac | qcc | qdc
3.r[d,f]  rd rf 
4.\d  [0,1,2,3,4,5,6,7,8,9]   
5. "-"代表一个区间  [0-9]
6.[^0-9] ^排除  非数字
  [^a-z]  非字母

量词:
    /\d\d\d\d\d/
    {n} 正好n个 /\d{5}/  
    {n,m}最少n个,最多m个  
        /\d{1,4}/
    {n,}最少n个,多了不限
        /\d{n,-10}/  错误写法
    {,m} 最少不限,最多m个  不能这么写
    {0,1}可有可无

简写:
    + {1,} 若干
    * {0,}可以没有,有了不限
    ? {0,1} 可有可无

/ab+/    是abbbbbbbbbbbb
/(ab)+/  匹配的是ababab
    ()正则里面叫:分组
/abc[0-9]{1,4}/
    abc1
    abc11
    abc111111  错了

转译:\
    \d digital  数字 [0-9]
    \w  word 单词
        代表区间:[a-z0-9_]->字母、数字或者_
    \s space 空白
    \D  非数字 [^0-9]
    \W  非单词 [^a-z0-9_]
    \S  非空白
    . 任意东西
    \. 点本身(x想要.)
    \\    \本身
    \\\\  \\本身
    \n 换行

/./  任意一个
/.+/  任意多个
/.*/ 可有可无

reg.test(str)
    如果符合返回true,否则返回false
    只要其中有一部分符合就返回true,否则返回false

例1:校验座机号
010-88688866
0416-1234567
88688866(不加区号也可以)
区号:(0[1-9]\d{1,2}-)?
号码:[1-9]\d{6,7}
/^(0[1-9]\d{1,2}-)?[1-9]\d{6,7}$/


例2:校验邮箱:
abc@163.com
10000@qq.com
zl@datura.com
用户名:\w+
\w+ @ [a-z0-9]+ (.[a-z]{2,8}){1,2}
\w+@[a-z0-9]+(.[a-z]{2,8}){1,2}


例3:校验中文

/[\u4e00-\u9fa5]{2,8}/

例4:校验手机号
移动号码:134 135 136 137 138 139 147 150 151 152 157 158 159 178 182 183 184 187 188
联通号码:130 131 132 145 155 156 171 175 176 185 186
电信号码:133 149 153 173 177 180 181 189

/^0?(13[0-9]|15[012356789]|18[0-9]|14[579]|17[135678])[0-9]{8}$/

例5:校验身份证号
公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。
顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。
下面是正则表达式:
出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])
身份证正则表达式/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i
位校验规则 6位地址编码+6位出生日期+3位顺序号
位校验规则 6位地址编码+8位出生日期+3位顺序号+1位校验位


4. 补充
    编码:encodeURIComponent(str)
    解码:decodeURIComponent(str)

上一篇下一篇

猜你喜欢

热点阅读