javascript正则表达式介绍
正则表达式就是一个用来描述字符模式的对象。它被用来在文本中执行模式匹配(pattern-matching)以及”查找-替换”(search-and-replace)的任务。javascript中正则的风格类似Perl中正则的风格。
创建
var reg = new RegExp(pattern,modifiers);
或var reg = /pattern/modifiers;
modifiers包括
- g : 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
如'Hey, Is this all there Is '.replace(/Is/g, 'is');//替换某字符串中所有的Is为is
- i : 执行对大小写不敏感的匹配
- m : 执行多行匹配,具体见这里
ps 新建一正则时可多个模式,如/hEllO/ig
正则相关方法
- .test()。该方法对一个字符串进行匹配。并根据匹配结果返回true或false。例如
/e/.test('The best things in life are free'); //true
- .exec()。该方法将对一个字符串进行匹配。并返回第一个匹配项目。例如:
/e/.exec('The best things in life are free'); // ["e"]
在字符串方法中,有match
方法,与exec
类似。如
'The best things in life are free'.match(/e/); //["e"]
正则中的元字符
正则表达式中的元字符是用来替代一类具有相同属性的字符的特殊字符,它也可以被称为字符类(character class)。
- . 查找单个字符,除了换行和行结束符。
- \w 查找单词字符(字母、数字以及下划线”_”)。
- \W 查找非单词字符。
- \d 查找数字。
- \D 查找非数字字符。
- \s 查找空白字符。
- \S 查找非空白字符。
- \b 匹配单词边界。
- \B 匹配非单词边界。
- \0 查找 NUL 字符。
- \n 查找换行符。
- \f 查找换页符。
- \r 查找回车符。
- \t 查找制表符。
- \v 查找垂直制表符。
- \xxx 查找以八进制数 xxx 规定的字符。
- \xdd 查找以十六进制数 dd 规定的字符。
- \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符。
正则表达式中的括号
大括号 ()
进行分组。好比email地址,我们就可以将它分为
- @前面的部分;
- @后面’.’之前的部分;
- ’.’之后的部分;
如果要匹配所有gamil邮箱中@前的用户名中带有jack的替换为joel'iamjack007@gmail.com'.replace(/^(\w*)(jack)(\w*)@gmail\.com$/, '$1joel$3@gmail.com'); //"iamjoel007@gmail.com"
这种类似于模块化的思想,不仅使我们一次可以专注于查找其中的一个小部分,也可以让我们在后面可以轻松的替换其中的某个部分,而不需要纠结于“牵一发而动全身”的痛苦。
方括号 []
用于查找某个范围内的字符
- [abc] 查找方括号之间的任何字符。
- [^abc] 查找任何不在方括号之间的字符。
- [0-9] 查找任何从 0 至 9 的数字。
- [a-z] 查找任何从小写 a 到小写 z 的字符。
- [A-Z] 查找任何从大写 A 到大写 Z 的字符。
- [A-z] 查找任何从大写 A 到小写 z 的字符。
- [adgk] 查找方括号内的任何字符。
- [^adgk] 查找不在方括号内的任何字符。
量词
匹配多个。如匹配3个数字可用正则/\d{3}/
。
- n+ 匹配任何包含至少一个 n 的字符串。
- n* 匹配任何包含零个或多个 n 的字符串。
- n? 匹配任何包含零个或一个 n 的字符串。
- n{X} 匹配包含 X 个 n 的序列的字符串。
- n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
- n{X,} 匹配包含至少 X 个 n 的序列的字符串。
- n$ 匹配任何结尾为 n 的字符串。
- ^n 匹配任何开头为 n 的字符串。
- ?=n 匹配任何其后紧接指定字符串 n 的字符串。
- ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
习题
- 在字符串”1.5 0 123 -7 -0.4”里面匹配带小数点的数,无论是正的还是负的。
- 在字符串”1.5 0 123”中匹配数字([1.5,0,123]),无论是整数还是小数。
- 更多习题
进阶
贪婪和非贪婪模式
默认正则匹配是贪婪模式的,即前面的正则匹配尽可能多的。如
/(\d+)(\d+)/.exec('12345');//结果["12345", "1234", "5"]
开启非贪婪模式,量词后面加?
如
/(\d+?)(\d+)/.exec('12345');//结果["12345", "1", "2345"]
更详细的的解释,点这里
非捕获性分组
在括号内容以?:
开头。如:
/(?:\d+)\d+/.exec('123');// 结果 ["123"]
匹配
Lookaround 是 向前匹配(Lookahead) 和 向后匹配(Lookbehind) 的统称。
向前匹配
包括向前正向匹配(Positive Lookahead)和向前负向匹配(Negative Lookahead),语法是
?=
和?!
。
前正向匹配:匹配任何其后紧接指定字符串 n 的字符串。
向前负向匹配:匹配任何其后没有紧接指定字符串 n 的字符串。
类似的还有向后匹配。
在javascript目前只能使用 Lookahead,还无法使用 Lookbehind。
Lookaround 参考教程:http://www.regular-expressions.info/lookaround.html
正则拓展库
xregexp特性
- 支持所有的ES5的正则的语法。
- 兼容 Explorer 5.5+, Firefox 1.5+, Chrome, Safari 3+, and Opera 11+。在nodejs上也可以使用。
- 比原生正则可读性高。
- 比原生正则易用。
更多资源
参考
- http://www.w3school.com.cn/js/jsref_obj_regexp.asp
- http://www.html-js.com/article/A-day-to-learn-JavaScript-JavaScript-regular-expressions-a
- http://javascript.info/tutorial/regular-expressions-javascript
- https://github.com/lifesinger/lifesinger.github.com/issues/162#wechat_redirect
习题答案
- '1.5 0 123 -7 -0.4'.match(/(-?\d+.\d+)/g)
- '1.5 0 123'.match(/(\d+.?\d+)|0/g)
javascript正则表达式介绍的更多相关文章
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式下——相关方法
上篇博客JavaScript 正则表达式上——基本语法介绍了JavaScript正则表达式的语法,有了这些基本知识,可以看看正则表达式在JavaScript的应用了,在一切开始之前,看看RegExp实 ...
- JavaScript 正则表达式上——基本语法
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- 5分钟教你学会JavaScript正则表达式
正则表达式在实际开发过程中和技术面试过程中的重要性不言而喻,本文仅仅只是教你如何在几分钟之类学会正则表达式,对于它的原理及运行机制不做介绍. 第一:什么是正则 正则表达式是一种用来描述一定数量文本的模 ...
- JavaScript正则表达式学习笔记(二) - 打怪升级
本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...
- javascript 正则表达式补充
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- JavaScript 正则表达式基础语法
前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...
- javascript正则表达式语法
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- 玩转JavaScript正则表达式
Why Regular Expression 我们先来看看,我们干哈要学正则表达式这玩意儿: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. ...
随机推荐
- BZOJ 3551 Peaks加强版
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3551 题意:给出一个图,n个点,m条边.边有权值点也有权值.若干询问,(v,x,k),问从 ...
- oracle, create table, insufficient privileges
SQL> exec pro_gz_day_report; ORA-01031: insufficient privileges ORA-06512: at & ...
- change the walltime for currently running PBS job (qalter pbs)
qalter jobid -l walltime=X e.g.qalter 377470.manager -l walltime=2222:00:00qalter: Unauthorized Requ ...
- 插入中文错误ERROR 1406 (22001): Data too long for column 'name' at row 1
1.在导入数据前执行以下命令即可:set SESSION sql_mode=''; 通过设置sql_mode变量更改模式.linux下安装完mysql后,默认的sql-mode值是空,在这种情形下my ...
- ASP.NET四则运算--策略模式
在ASP.NET中实现四则运算,同样使用了类的封装,以及策略模式.只不过是把封装的类.前台代码以及后台的代码分离开来,但同样是要达到功能的实现. Calculator.cs using System; ...
- 指令随笔之:tail、cat、scp、&、&&、;、|、>、>>
tail(中文意思是跟踪) tail默认只看文件的最后10行内容,cat则一次显示全部内容 ping 192.168.120.204 > zyx.log & # &表 ...
- phpcms 头部搜索栏上边的 “新闻 | 图片 | 下载 | 专题” 是在哪里修改的?
phpcms 是怎么修改以下 栏目列. 在后台的时候,“模块管理>全站搜索”,可以修改搜索分类
- [转]瓦的VPS后台kiwivm面板使用+安装AMH+装VPN
参考网址:http://u-lis.com/archives/4159 ZC:网页图片保存于“百度云 OsSkill --> 全部文件 > 知识__来自网页 > 瓦 > 瓦_面 ...
- java的重修之路
一.内存管理 java里的声明分引用与基本数据类型. 数组: java里new一个对象数组为 person[] A; A = new person[4]; person[0] = new pers ...
- nodejs学习笔记<六>文件处理
nodejs处理文件模块:fs —> var fs = require(‘fs’); 读取文件:readFileSync & readFile 读取文件路径为绝对: 读取结果需要to ...