javascript学习笔记(八)正则表达式


Posted in Javascript onOctober 08, 2014

基本概念

正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。

首先推荐几个正则表达式编辑器
 Debuggex :https://www.debuggex.com/
 PyRegex:http://www.pyregex.com/
 Regexper:http://www.regexper.com/

正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于:
[copy]检查文本中是否含有指定的特征词
找出文中匹配特征词的位置
从文本中提取信息,比如:字符串的子串
修改文本

 说明:正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;搜索/替换时是否加上此限定则根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自行处理。

优先权顺序

在构造正则表达式之后,就可以象数学表达式一样来求值,也就是说,可以从左至右并按照一个优先权顺序来求值。 下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序:

操作符 描述
\ 转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和顺序

建立正则表达式

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。
 可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式。

对 JScript 而言,分隔符为一对正斜杠 (/) 字符。例如:
/expression/

 对 VBScript 而言,则采用一对引号 ("") 来确定正则表达式的边界。例如:

"expression"

 看个例子

//匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线
var re =new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,19}$");

if(re.test(aaaa)){

alert("格式正确");

}else{

alert("格式错误");

}

 正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

常用的正则表达式

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r
 评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
 评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
 评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
 评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
 评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
 评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
 评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
 评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
 评注:提取ip地址时有用

匹配特定数字
[copy] ^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$

//匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$

//匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$

//匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

//匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

//匹配非正浮点数(负浮点数 + 0)

 评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串
[copy]^[A-Za-z]+$

//匹配由26个英文字母组成的字符串
^[A-Z]+$

//匹配由26个英文字母的大写组成的字符串
^[a-z]+$

//匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$

//匹配由数字和26个英文字母组成的字符串
^\w+$

//匹配由数字、26个英文字母或者下划线组成的字符串

 评注:最基本也是最常用的一些表达式

思维导图

javascript学习笔记(八)正则表达式

Javascript 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
JavaScript实现LI列表数据绑定的方法
Aug 04 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
Dec 08 Javascript
jquery事件与绑定事件
Mar 16 Javascript
微信小程序之网络请求简单封装实例详解
Jun 28 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
Aug 17 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
JavaScript实现简单计时器
Jun 22 Javascript
javascript学习笔记(七)Ajax和Http状态码
Oct 08 #Javascript
javascript学习笔记(六)数据类型和JSON格式
Oct 08 #Javascript
javascript学习笔记(五)原型和原型链详解
Oct 08 #Javascript
JavaScript中获取高度和宽度函数总结
Oct 08 #Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 #Javascript
JavaScript中获取样式的原生方法小结
Oct 08 #Javascript
吐槽一下我所了解的Node.js
Oct 08 #Javascript
You might like
PHP安全配置
2006/12/06 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
家长对小学生的评语
2014/01/28 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
生日祝酒词大全
2015/08/10 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
vue+echarts实现多条折线图
2022/03/21 Vue.js