• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >正则表达式 > 常用正则表达式知识点解读及判读有效数字、手机号邮箱正则表达式

常用正则表达式知识点解读及判读有效数字、手机号邮箱正则表达式

作者:冷雨恋晴 字体:[增加 减小] 来源:互联网 时间:2017-05-11

冷雨恋晴通过本文主要向大家介绍了地形图的判读知识点,等高线地形图的判读,经纬网的判读与应用,地形图的判读,晨昏线的判读等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、正则仅仅就是用来处理字符串的:匹配、捕获

匹配:验证当前的字符串是否符合我们的规则(每一个正则都是一个规则)
捕获:在整个字符串当中,把符合规则的字符都依次的获取到--->exec、match、replace

2、正则的组成:元字符、修饰符

元字符:

特殊意义的元字符:

\d匹配一个0-9的数字相当于[0-9],和它相反的
\D匹配一个除了0-9的任意字符相当于【】 
\w匹配一个0-9、a-z、A-Z_ 的数字或字符,相当于[0-9a-zA-Z_]  、
\s匹配一个空白字符(空格、制表符。。。)
\b匹配一个单词的边界 “w100 w000”
\t匹配一个制表符
\n匹配一个换行
. 匹配一个除了\n以外的任意字符
^ 以某一个元字符开头
$ 以某一个元字符结尾
\ 转译字符
x|y  x或者y的一个
[xyz] x、y、z、中的任意一个
[^xyz]除了x、y、z、中的任意一个
[a-z] -> 匹配a-z中的任意一个字符
[^a-z] -> 匹配除了a-z中的任意一个字符
() 正则中的分组

量词:

*  0到多个
+  1到多个
?  0到1个   

?在正则中的意义比较多

    放在一个非量词元字符后面代表出现0-1次  例如/^\d?$/出现0-9直接的数0到1次

    放在一个量词元字符后面,取消捕获时候的贪婪性  /^\d+?$/捕获的时候只是把第一个捕获的数字获取 "2015"--->2
    (?:)分组值匹配不捕获
    (?=)正向预查
    (?!)负向预查

()的作用
1)改变默认的优先级
2)可以进行分组捕获
3)分组引用

{n}出现n次
{n,}出现n到多次
{n,m}出现n到m次

普通元字符

任何字符在正则中除了以上有特殊意义的,其他的都是代表本身意思的普通元字符

修饰符:

i:忽略字母的大小写
m:multiline 多行匹配
g:global全局匹配

项目中经常使用的正则

1)判断是有效数字的正则

   有效数字是指:正数、负数、零、小数

第一部分:可能出现加减或者没有
第二部分:一位数可以是0,多位数不能以0开头
第三部分:可以有小数也可以没有小数,但是一旦出现小数点,后面至少跟一位数字
var reg =/^[+-]?(\d|[1-9]\d+)(\.\d+)?$/;

有效的正整数(包含0):/^[+]?(\d|[1-9]\d+)$/;

有效的负整数(包含0):/^-(\d|[1-9]\d+)$/;

判断手机号(简单版):
var  reg=/^1\d{10}$/;

判断邮箱
第一部分:数字、字母、下划线、- 一到多位
第二部分:@
第三部分:数字、字母、 一到多位
第四部分:(.两到四位) .com   .cn   .net   ..      .com.cn
var reg =/^[0-9a-zA-Z_-]+@[0-9a-zA-Z-]+(\.[a-zA-Z]{2,4}){1,2}$/

判断年龄在18到65之间的
18-19/20-59/60-65
var  reg =/^((18|19)|([2-5]\d)|(6[0-5]))$/

真实有效的中华人民共和国姓名 2-4 位汉字
var reg = /^[\u4e00-\u9fa5]{2,4}$/;

身份证号码
前六位是省->市->县(区)
四位年 两位月 两位日

简单版

    var reg = /^\d{17}(\d|X)$/;
    130828199012040617

复杂版

    var reg = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(?:\d|X)$/;

细节知识点

里面出现的任何字符都是代表本身意义的,例如:[.]中的”.“就是代表一个小数点而不是除了\n以外的任意字符
里面出现18不是数字18而是1或者8,例如[18-65]是1或者8-6或者5中任选一个

1、exec正则的捕获方法--->先匹配,然后把匹配的内容捕获

如果字符串没有匹配这个正则,捕获的返结果是null

如果和正则匹配,返回的结果是一个数组

例子
var str ="2015zhufeng2016peixun"
var reg = /\d+/;

第一项是我们捕获的内容

index:捕获的内容在元字符串中开始的索引位置
input:捕获的原始字符串

2、正则的捕获是懒惰的

正则的每一次捕获都从lastIndex值开始,第一次捕获的时候,lastIndex=0,从原始字符串索引为0的位置开始查找捕获,而默认的情况下,第一次捕获完成,lastIndex的值并没有发生改变,还是0,所以第二次捕获还是从原始字符串索引为0处开始查找,这样找到的还是第一次捕获的内容
  解决办法:添加全局修饰符g--->加上g后,第一次捕获完成后,lastIndex的值发生了改变,变为第一次捕获内容后的第一个字符的开始索引,第二次捕获是继续向后查找的...
  疑问:不用全局修饰符g每次捕获完成后手动修改lastIndex的值不可以么?
不可以,虽然手动修改了lastIndex,确实把lastIndex的值进行改变了,但是正则查找的时候还是从索引0开始的

var str = "zhufeng2015peixun2016";
  var reg = /\d+/g;
</div>

例子

    为了防止没有加全局修饰符g导致的死循环,我们在处理之前,对于没有添加g的手动给添加一个g

RegExp.prototype.myExecAll = function myExecAll() {
    var _this = this, str = arguments[0], ary = [], res = null;
    !_this.global ? _this = eval(_this.toString() + "g") : null;
    res = _this.exec(str);
    while (res) {
      ary[ary.length] = res[0];
      res = _this.exec(str);
    }
    return ary;
  };
  var ary = reg.myExecAll(str);
  console.log(ary);
    console.log(reg.lastIndex);//->0
    var res = reg.exec(str);
    console.log(res);
    console.log(reg.lastIndex);//->11
    res = reg.exec(str);
    console.log(res);
    console.log(reg.lastIndex);//->21
    res = reg.exec(str);
    console.log(res);//->null
</div>

 3、match:捕获字符串中存在一个叫做match的方法也可以实现捕获,而且只要我们取消了正则的懒惰性,执行一次match方法就可以捕获到所有内容了

  var str = "zhufeng2015peixun2016";
  var reg = /\d+/g;
  console.log(str.match(reg));
</div>

    疑问:那我们都用match来替换exec多好啊?

4、正则的分组捕获

每一次捕获的时候,不仅仅可以把大正则匹配的内容捕获到,而且还可以把每一个小分组(子正则)匹配的内容单独的捕获到

    var str = "zhufeng[2015]peixun[2016]";
    var reg = /\[(\d)(\d+)\]/g;
    var res = reg.exec(str);
    console.log(res);
    ["[2015]", "2", "015", index: 7, input: "zhufeng[2015]peixun[2016]"]
</div>

第一项是大正则捕获的内容 res[0]
第二项是第一个分组捕获的内容 res[1]
第三项是第二个分组捕获的内容 rex[2]
。。。。。

分组的只匹配不捕获:我们如果执行把分组内容进行匹配但是不进行捕获的话,只需要在分组的前面加上?:即可

  var str = "zhufeng[2015]peixun[2016]";
   var reg = /\[(?:\d)(\d+)\]/g;
   var res = reg.exec(str);
   console.log(res);
   ["[2015]", "015"...]
</div>

      数组中的第一项是大正则捕获的内容 res[0]
      数组中的第二项是第二个分组捕获的内容 res[1]
      第一个分组添加了?:,所以只匹配不捕获

5、exec和match的区别

match只能捕获大正则匹配的内容,对于分组捕获中,是无法获取分组匹配的内容的,所以如果捕获的时候不需要捕获分组的内容,我们直接用match更方便,如果需要捕获分组的内容,我们只能使用exec来一个个捕获

var str = "zhufeng[2015]peixun[2016]";
  var reg = /\[(\d+)\]/g;
  //console.log(str.match(reg));//->["[2015]", "[2016]"]
  var ary = [];
  var res = reg.exec(str);
  while (res) {
    //ary.push(res[1]);
    ary.push(RegExp.$1);//RegExp.$1获取当前正则第一个分组捕获的内容,(可能在部分IE浏览器下捕获不到值)
    res = reg.exec(str);
  }
  console.log(ary);
</div>

6、正则的贪婪性:在每一次的捕获的时候,总是按照正则匹配的最长结果捕获

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 常用正则表达式知识点解读及判读有效数字、手机号邮箱正则表达式

相关文章

  • 2017-05-11正则表达式中使用变量赋值
  • 2017-05-11JScript中正则表达式用法详解
  • 2017-05-11常见的数字验证正则表达式整理
  • 2017-05-11正则表达式截取字符串的方法技巧
  • 2017-05-11javascript之正则表达式基础知识小结
  • 2017-05-11PHP正则表达式基础入门
  • 2017-05-11正则表达式在IOS中的应用及IOS中三种正则表达式的使用与比较
  • 2017-05-11正则替换实现输入框只能有数字、中英文逗号
  • 2017-05-11表单 数字字符验证正则
  • 2017-05-11Linux正则表达式特性详解及BRE与ERE的异同点

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java使用正则表达式对注册页面进行验证功能实现
    • php的正则表达式完全手册
    • 正则表达式常用元字符整理小结
    • 一个关于正则表达式的问题
    • 正则表达式匹配,替换,查找
    • js中使用正则表达式查找字母和数字的方法
    • 正则表达式30分钟入门教程 v2.1版
    • 正则替换换行符和把 br 替换成换行符
    • asp 正则表达式检测http开头的函数
    • javascript中使用正则表达式实现删除字符串中的前后空格

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有