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 相关文章推荐
XP折叠菜单&amp;仿QQ2006菜单
Dec 16 Javascript
javascript URL编码和解码使用说明
Apr 12 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
Oct 22 Javascript
jQuery实现文本框邮箱输入自动补全效果
Nov 17 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
Javascript简写条件语句(推荐)
Jun 12 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
Aug 30 Javascript
JS面试题中深拷贝的实现讲解
May 07 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 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 强制下载文件代码
2010/10/24 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
解析php中memcache的应用
2013/06/18 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
php多进程应用场景实例详解
2019/07/22 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
大专生毕业的自我评价
2014/02/06 职场文书
高中班主任评语大全
2014/04/25 职场文书
学生安全承诺书
2014/05/22 职场文书
法语专业求职信
2014/07/20 职场文书
党性心得体会
2014/09/03 职场文书
担保书格式范文
2015/09/22 职场文书
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python