与我一起学正则

前言

  • 正则表达式,对字符串进行模式匹配的工具对象。一般对象都有两种创建方式:
    • 对象示例,通过new obj() 类似的方式
    • 直接量语法,也就是直接赋值。var pattern=/^$/ 备注:目前建议的是perl风格的正则表达式,简易易懂。

简单了解

标准语法

  1. 创建的语法 : new RegExp(pattern, attributes); 其中pattern代表匹配模式,arrtibutes代表匹配限制,匹配限制中有g,i,m,g代表执行全局匹配,i代表执行大小写不敏感的匹配,m代表多行匹配。
  2. 举例 [A-z] 大写A到小写z之间的字符 [0-9]0-9之间的任意数字 [^avb] 不属于avb之间的字符
  3. 正则对象的常用方法 reg.test(str) 返回布尔型数据 ,可以检测是否符合规则
  4. 拓展:String对象对正则的使用 search(reg) ;match(reg),split(reg),replace(reg,str),etc…

正则对象语法

  • 元字符,用来匹配的基本字符,直接量字符
  • 正则量词(出现次数)
  • 选择 分组和引用

| 选择 或者 ()组合 将几个项组合为一个单元,这些单元可以通过数量修饰以及|连接 (?:…)只组合,把项组合到一个单元,但不记忆与该组相匹配的字符。 \n 和第n个分组第一次匹配的字符相匹配。

  • 指定匹配位置与修饰符

?! 负向断言,当不符合前面的匹配时,后面的语句不在进行匹配。 ^ 匹配的开始 $ 匹配的结束 \b 单词的边界 \B 非单词的边界 修饰符 i 执行不区分大小写的匹配 g执行全局的匹配,找到所有的匹配,而不是找到一个后停止 m 多行匹配模式

  • 用于模式匹配的String 的方法

search(patt) 返回第一个匹配的指针位置 replace(patt) 吧复合匹配规则的字符串替换为规定的字符串 match(patt) 返回匹配的字符串数组,如果没有返回null,如果设置了修饰符g则会返回所有的复合结果,否则返回第一个。返回的属性是index和input split(patt) 可以按照指定的模式划分

  • 对象方法:

  • exec(str)与str.match(patt)有点类似,如果找不到返回null,如果能找到,返回一个数组。返回的第一个元素是与表达式匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的子串。属性index包含了匹配发生的位置,属性input引用的是正在检索的字符串。与match不同的是,不管是否具有g属性修饰,返回的都是数组。
  • test(str) 返回布尔型,符合规范是true,不符合是false
  • patt1.compile(patt2),改变patt 的内容
  • 常用的正则表达式枚举:
    • /^[1][0-9]{10}$/ 11位的手机号,以1开始的
    • /^a-zA-Z0-9([a-zA-Z]{2,5})$/ 邮箱
    • /^[0-9]{6}$/ 6位的数字验证码
    • 姓名
    • 身份证号
    • 地址
    • 密码

常用正则写法

1、校验密码强度 密码的强度必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间 ^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$

2、校验中文 字符串只能是中文 ^[\u4e00-\u9fa5]{0,}$

3、由数字,26个英文字母或下划线组成的字符串 ^\w+$

4、校验E-Mail 地址 [\w!#$%&’+/=?^_{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_{|}~-]+)@(?:\w?\.)+\w?

5、校验身份证号码 15位: ^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$ 18位: ^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$

6、校验日期 “yyyy-mm-dd“ 格式的日期校验,已考虑平闰年 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

7、校验金额 金额校验,精确到2位小数 ^[0-9]+(.[0-9]{2})?$

8、校验手机号 下面是国内 13、15、18开头的手机号正则表达式 ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

9、判断IE的版本 ^.MSIE 5-8?(?!.Trident\/[5-9]\.0).*$

10、校验IP-v4地址 \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

11、校验IP-v6地址 (([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))

12、检查URL的前缀 if (!s.match(/^[a-zA-Z]+:\/\//)){ s = ‘http://’ + s;}

13、提取URL链接 ^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?

14、文件路径及扩展名校验 ^([a-zA-Z]\:|\\)\\([^\\]+\\)[^\/:?”<>|]+\.txt(l)?$

15、提取Color Hex Codes ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

16、提取网页图片 \< [img][^\\>][src] = *[\”\’]{0,1}([^\”\’\ >])

17、提取页面超链接 (<a\s(?!.\brel=)[^>])(href=”https?:\/\/)((?!(?:(?:www\.)?’.implode(‘|(?:www\.)?’, $follow_list).’))[^”]+)”((?!.\brel=)[^>])(?:[^>])>

18、查找CSS属性 ^\s[a-zA-Z\-]+\s[:]{1}\s[a-zA-Z0-9\s.#]+[;]{1}

19、抽取注释

20、匹配HTML标签 <\/?\w+((\s+\w+(\s=\s(?:”.?”|’.?’|[\^'”>\s]+))?)+\s|\s)\/?>

相关教程:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nummy

ECMAScript 6 特性ECMAScript 6 特性

ECMAScript 6,也被称做ECMAScript 2015,是ECMAScript标准的下一个版本。这个标准预计将于2015年6月被正式批准。ES6是这门...

831
来自专栏软件开发 -- 分享 互助 成长

C++ STL之迭代器注意事项

1、两个迭代器组成的区间是前闭后开的 2、如果迭代器的有效性,如果迭代器所指向的元素已经被删除,那么迭代器会失效 http://blog.csdn.net/hs...

2135
来自专栏大内老A

ASP.NET Web API中的Controller

虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是A...

19210
来自专栏xingoo, 一个梦想做发明家的程序员

Log4j官方文档翻译(七、日志格式化)

apache log4j提供各种layout对象,然后根据自己指定的layouts对象转化日志信息。通常来说都是应用量身定制layout对象转换信息格式。 所有...

1965
来自专栏Golang语言社区

转--Golang语言-- Web 编程

1.golang的安装工具 1.1 GVM 第三方开发的Go多版本管理工具 2.golang环境变量 2.1 GOROOT=D:\go (golang 安装目录...

3586
来自专栏jmeter高手高高手

Jmeter(五)_函数

1、它有两个参数,第一个参数是要执行的语句,可以是beanshell语句或者是文件地址,是必选参数;第二个参数是保存结果的变量名称,非必选参数。

1632
来自专栏编程

linux基础(三)

一、文本处理工具 1、文本查看工具less和cat cat -E filename 能看到行的结束符 -A filename 能看到tab键 回车 (hexdu...

2447
来自专栏轮子工厂

5. 很“迷”的字符与字符串

最近一直在为自己的浏览量而担忧啦,都快被厂长大人约谈了……我真的有尽力在写稿子哦,所以也请各位老铁,如果觉得我的文章还不错就转发到朋友圈或者微信群之类的,让更多...

1132
来自专栏Golang语言社区

转--Golang语言-- Web 编程

1.golang的安装工具 1.1 GVM 第三方开发的Go多版本管理工具 2.golang环境变量 2.1 GOROOT=D:\go (golang 安装目录...

3718
来自专栏小樱的经验随笔

线段树区间更新操作及Lazy思想(详解)

此题题意很好懂:  给你N个数,Q个操作,操作有两种,‘Q a b ’是询问a~b这段数的和,‘C a b c’是把a~b这段数都加上c。 需要用到线...

5077

扫码关注云+社区