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 相关文章推荐
深入理解javascript中return的作用
Dec 30 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
Feb 02 Javascript
Javascript核心读书有感之表达式和运算符
Feb 11 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
基于node.js制作简单爬虫教程
Jun 29 Javascript
react native带索引的城市列表组件的实例代码
Aug 08 Javascript
AngularJS实现的base64编码与解码功能示例
May 17 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 Javascript
如何给element添加一个抽屉组件的方法步骤
Jul 14 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
详解JavaScript中精度失准问题及解决方法
Feb 04 Javascript
jquery插件懒加载的示例
Oct 24 jQuery
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实现WEB动态网页静态
2006/10/09 PHP
php中变量及部分适用方法
2008/03/27 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
php输出图像的方法实例分析
2017/02/16 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
小学生检讨书大全
2014/02/06 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
体育委员竞选稿
2015/11/21 职场文书
远程教育培训心得体会
2016/01/09 职场文书