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 我们先来看看,我们干哈要学正则表达式这玩意儿: 复杂的字符串搜寻.替换工作,无法用简单的方式(类似借助标准库函数)达成. 能够帮助你进行各种字符串验证. ...
随机推荐
- [cdoj1380] Xiper的奇妙历险(3) (八数码问题 bfs + 预处理)
快要NOIP 2016 了,现在已经停课集训了.计划用10天来复习以前学习过的所有内容.首先就是搜索. 八数码是一道很经典的搜索题,普通的bfs就可求出.为了优化效率,我曾经用过康托展开来优化空间,甚 ...
- UVA 12050 - Palindrome Numbers 模拟
题目大意:给出i,输出第i个镜像数,不能有前导0. 题解:从外层开始模拟 #include <stdio.h> int p(int x) { int sum, i; ;i<=x;i+ ...
- iOS中3种正则表达式的使用与比较
正则表达式在用户注册和登录中应用很广,通过正则表达式可以判断用户输入的数据正确与否. 在iOS4.0以前开发者一般是通过谓词(NSPredicate)和加入正则表达式的第三方库(如:RegexKitL ...
- SaveXml的方法汇总
/// <summary> /// 保存XML文件 /// </summary> /// <returns></returns> public bool ...
- 用于 ‘Suse‘ Linux 包管理的 Zypper 命令大全
SUSE( Software and System Entwicklung,即软件和系统开发.其中‘entwicklung‘是德语,意为开发)Linux 是由 Novell 公司在 Linux 内核基 ...
- C#部署安装,将用户安装路径记录下写入注册表,并启动
安装部署程序,将安装目录写入注册表 (1)在“安装部署项目”上点击“注册表编辑器” (2)在HKey_LOCAL_MACHINE_SoftWare 下新建键 Manufacturer 代表软件的制造商 ...
- UVALive 6500 Boxes
Boxes Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Pract ...
- Bug2算法的实现(RobotBASIC环境中仿真)
移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求--避障.之前简单介绍过Bug避障算法,但仅仅了解大致理论而不亲自动手实现一遍很难有深刻的印象,只能说似懂非懂.我不是天才,不 ...
- BSGS模版 a^x=b ( mod c)
kuangbin的BSGS: c为素数: #define MOD 76543 int hs[MOD],head[MOD],next[MOD],id[MOD],top; void insert(int ...
- Spring的DI(Ioc) - 利用构造器注入
1: 在给对象提供构造器 public class PersonServiceImpl implements PersonService { private PersonDao personDao; ...