JavaScript中的正则表达式简明总结


Posted in Javascript onApril 04, 2014

一、定义正则表达式的方法

定义正则表达式的方法有两种:构造函数定义和正则表达式直接量定义。例如:

var reg1 = new RegExp('\d{5, 11}'); // 通过构造函数定义
var reg2 = /\d{5, 12}/; // 通过直接量定义

正则表达式直接量字符
       \o:NUL字符(\u0000)
       \t:制表符(\u0009)
       \n:换行符(\u000A)
       \v:垂直制表符(\u000B)
       \f:换页符(\u000C)
       \r:回车符(\u000D)
       \xnn:由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n
       \uxxxx:由十六进制数xxxx指定的Unicode字符,例如\u0009等价于\t
       \cX:控制字符^X,例如,\cJ等价于换行符\n
正则表达式锚字符
       ^:匹配字符串的开头,在多行检索中,匹配一行的开头
       $:匹配字符串的结尾,在多行检索中,匹配一行的结尾
       \b:匹配一个单词的边界,简言之,就是位于字符\w和\W之间的位置,或位于字符\w和字符串的开头或者结尾之间的位置([\b]匹配的是退格符)
       \B:匹配非单词边界的位置
       (?=p):零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符
       (?!p):零宽负向先行断言,要求接下来的字符串不与p匹配
正则表达式的字符类
       [...]:方括号内的任意字符
       [^...]:不在方括号内的任意字符
       .:除换行符和其他Unicode行终止符之外的任意字符
       \w:任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
       \W:任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
       \s:任何Unicode空白符
       \S:任何非Unicode空白符的字符,注意\w和\S不同
       \d:任何ASCII数字,等价于[0-9]
       \D:除了ASCII数字之外的任何字符,等价于[^0-9]
       [\b]:退格直接量(特例)
正则表达式的重复字符语法
       {n, m}:匹配前一项至少n次,但不能超过m次
       {n, }:匹配前一项n次或者更多次
       {n}:匹配前一项n次
       ?:匹配前一项0次或者1次,也就是说前一项是可选的,等价于{0, 1}
       +:匹配前一项1次或多次,等价于{1, }
       *:匹配前一项0次或多次,等价于{0, }
正则表达式的选择、分组和引用字符
       |:选择,匹配的是该符号左边的子表达式或右边的子表达式
       (…):组合,将几个项组合为一个单元,这个单元可通过“*”、“+”、“?”和“|”等符号加以修饰,而且可以记住和这个组相匹配的字符串以供此后的任何使用
       (?: …):只组合,把项组合到一个单元,但是不记忆与改组相匹配的字符
       \n:和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也有可能是嵌套的),组索引是从左到右的左括号数,“(?:”形式的分组不编码
正则表达式修饰符
       i:执行不区分大小写的匹配
       g:执行一个全局匹配,简言之,即找到所有的匹配,而不是在找到第一个之后就停止
       m:多行匹配模式,^匹配一行的开头和字符串的开头,$匹配行的结尾和字符串的结尾
用于模式匹配的String方法
       search():它的参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果没有匹配的子串就返回-1。如果search()的参数不是正则表达式,则首先会通过RegExp构造函数将它转换为正则表达式,search()不支持全局检索,因为它忽略修饰符g。如:

var s = "JavaScript".search(/script/i); // s = 4

 

       replace():它用来执行检索与替换。接收两个参数,第一个是正则表达式,第二个是要进行替换的字符串。正则表达式如果设置的修饰符g,则进行全局替换,否则只替换匹配的第一个子串。如果第一个参数不是正则表达式,则直接搜索该字符串,而不是将其转换为正则表达式。如:

var s = "JavaScript".replace(/java/gi, "Script"); // s =  Script Script

 

       match():它的参数是一个正则表达式,如果不是则通过RegExp转换,返回的是一个由匹配结果组成的数组。如果设置了修饰符g则进行全局匹配。如:

var d = '55 ff 33 hh 77 tt'.match(/\d+/g); // d = ["55", "33", "77"]

 

       split():这个方法用以将调用它的字符串拆分为一个子串组成的数组,使用的分隔符是split()的参数,它的参数也可以使一个正则表达式。如:

var d = '123,31,453,645'.split(','); // d = ["123", "31", "453", "645"]
var d = '21 , 123,  44,  64,  67,  3'.split(/\s*,\s*/); // d = ["21", "123", "44", "64", "67", "3"]

二、RegExp对象
       每个RegExp对象都有5个属性。属性source是一个只读字符串,包含正则表达式的文本。属性global是一个只读布尔值,用以说明这个正则表达式是否带有修饰符g。属性ignoreCase是一个只读布尔值,用以说明这个正则表达式是否带有修饰符i。属性multiline是一个只读布尔值,用以说明这个正则表达式是否带有修饰符m。属性lastIndex是一个可读可写的整数,如果匹配模式带有g修饰符,这个属性存储整个字符串中下一次检索的开始位置。
       RegExp对象有两个方法。exec()的参数是一个字符串,它的功能与match()相似,exec()方法对一个指定的字符串执行一个正则表达式,也就是在一个字符串中执行匹配检索。如果没有找到任何匹配就返回null,找到了匹配就返回一个数组,这个数组的第一个元素包含的是与正则表达式相匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的子串,不论正则表达式是否有修饰符g,都会返回一样的数组。当调用exec()的正则表达式对象具有修饰符g时,它将把当前正则表达式对象的lastIndex属性设置为紧挨着匹配子串的字符位置。当同一个正则表达式第二次调用exec()时,它将从lastIndex属性所指示的字符串处开始检索,如果exec()没有发现任何匹配结果,它会将lastIndex重置为0。如:

var p = /Java/g;
var text = "JavaScript is more fun than Java!"
var r;
while((r = p.exec(text)) != null) {
       console.log(r, 'lastIndex: ' + p.lastIndex);
}

       另外一个方法是test(),它的参数是一个字符串,用test()对某个字符串进行检查,如果包含正则表达式的一个匹配结果,则返回true否则返回false。如:

var p = /java/i;
p.test('javascript'); // true
Javascript 相关文章推荐
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
Jul 09 Javascript
js中传递特殊字符(+,&)的方法
Jan 16 Javascript
window.onload与$(document).ready()的区别分析
May 30 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
javascript检测移动设备横竖屏
May 21 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
Jan 18 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
在layui下对元素进行事件绑定的实例
Sep 06 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
Dec 30 jQuery
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 #Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 #Javascript
JQuery记住用户名和密码的具体实现
Apr 04 #Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 #Javascript
JavaScript制作的可折叠弹出式菜单示例
Apr 04 #Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 #Javascript
JavaScript中的prototype.bind()方法介绍
Apr 04 #Javascript
You might like
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
PHP中调用JAVA
2006/10/09 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
平面设计岗位职责
2013/12/14 职场文书
销售部主管岗位职责
2013/12/18 职场文书
设计大赛策划方案
2014/06/13 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
刑事申诉状范文
2015/05/20 职场文书
党内外群众意见范文
2015/06/02 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS