先来一段介绍:javascript
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在不少文本编辑器里,正则表达式一般被用来检索、替换那些符合某个模式的文本。java
简单说就是:正则表达式
它是对字符串执行模式匹配的强大工具。segmentfault
Javascript中的正则表达式相较于其余语言来讲实现的并不完整,但仍然是十分强大的,可以帮助咱们完成绝大多数模式匹配任务。下面将一步一步详细介绍。编辑器
在Javascript中,定义一个正则表达式有两种方式,一种是直接量,另外一种是使用构造函数。函数
Javascript可使用相似Perl的语法定义一个正则表达式工具
var r = /pattern/flags;
其中pattern
是任何简单或复杂的正则表达式,flags是用以表达正则表达式行为的一个或者多个标识。code
来看几个例子regexp
var r1 = /at/g; // 匹配字符串中全部'at'的实例 var r2 = /.ho/gi; // 匹配以'ho'结尾的三个字符的组合,不区分大小写
Javascript中正则表达式的构造函数为RegExp,即Regular Expression
的缩写,它接收两个参数,第一个为要匹配的字符串模式,另外一个是可选的标识位。blog
如:
var r = new RegExp('hello', 'g'); // 匹配字符串中全部的'hello'实例
有一点必定要注意,第一个参数是一个字符串,而不是正则表达式的直接量。
在正则表达式的模式中,有一些字符是有特殊含义的,被称为元字符
,若是要匹配元字符,则必须对其进行转义。
这些元字符分别是:
( [ { \ ^ $ | ) ? * + . ] }
例如:
// 若是要匹配'/user/name'这个字符串,正则表达式须要这样 var r1 = /\/user\/name/; var r2 = /\.ho/; // 匹配'.ho'这个字符串
若是使用构造函数定义正则表达式,因为构造函数的第一个参数必须是一个字符串,在匹配元字符时,这将会致使双重转义。
例如:
var r1 = new RegExp('\/user', 'g'); // wrong // 因为\在字符串中须要转义为\\,因此,若是要匹配/user,正则表达式须要写为 var r1 = new RegExp('\\/user', 'g');
全部元字符都须要进行双重转义
另外,还有一些预约义的特殊字符也被称为元字符
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符。 |
\w | 查找单词字符。 |
\W | 查找非单词字符。 |
\d | 查找数字。 |
\D | 查找非数字字符。 |
\s | 查找空白字符。 |
\S | 查找非空白字符。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
\0 | 查找 NUL 字符。 |
\n | 查找换行符。 |
\f | 查找换页符。 |
\r | 查找回车符。 |
\t | 查找制表符。 |
\v | 查找垂直制表符。 |
\xxx | 查找以八进制数 xxx 规定的字符。 |
\xdd | 查找以十六进制数 dd 规定的字符。 |
\uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
有一点须要特别注意:无论一个元字符表明多少种含义,单个元字符始终只匹配单个字符
元字符其实没必要刻意花时间去记忆,等了解了所有的正则表达式使用方法以后,天然就知道哪些字符是有特殊含义的,也就知道了哪些时候须要转义了。
下面将陆续介绍正则表达式的使用方法。