Skip to content
sobird edited this page Apr 24, 2016 · 12 revisions

正则表达式是一门简单语言的语法规范。它以方法的形式被用于对字符串中的信息进行查找、替换和提取操作。可处理正则表达式的方法有 regexp.execregexp.teststring.matchstring.replacestring.searchstring.split

语法

Javascript中正则语法可表示为:/pattern/attributes,attributes有三个选择:i、m和g,其中m(多行匹配)不常用。

var regexp = /parrern/ig;
  • g:global,全文搜索,默认搜索到第一个结果停止
  • i:ingore case,忽略大小写,默认大小写敏感
  • m:multiple lines,多行搜索(^和$能匹配行结束符)

定义

JavaScript种正则表达式有两种定义方式,下面定义了一个匹配类似test&123的字符串

1、构造函数

var reg = new RegExp('test&123','i');

2、字面量

var reg = /test&123/i;

特殊字符

\ / [ ] ( ) ? + * | . ^ $

如果你希望上面列出的字符按照字母去匹配,那么必须要用一个\前缀来进行转义。

方括号

方括号[]用于匹配某个范围内的字符

表达式 描述
[abc] 匹配括号内的任何abc字符,等同于`(a
[^abc] 匹配括号内的任何非abc字符
[0-9] 匹配从0到9的数字
[a-z] 匹配从小写a到z的字符
[A-Z] 匹配从大写A到Z的字符
[^0-9] 匹配非数字
[^a-z] 匹配非小写字符
[^A-Z] 匹配非大写字符

元字符

元字符(Metacharacter)是拥有特殊含义的字符

元字符 描述
. 匹配除了换行符和行结束符
\w 匹配单词字符,等同于字符集合[a-zA-Z0-9_]
\W 匹配非单词字符,等同于字符集合[^a-zA-Z0-9_]
\d 匹配一个数字,等同于字符集合[0-9]
\D 匹配一个非数字字符,等同于字符集合[^0-9]
\s 匹配空白字符,等同于字符集合[\f\n\r\t\u000B\u0020\u00A0\u00A0\u2028\u2029]
\S 匹配非空白字符,等同于字符集合[^\f\n\r\t\u000B\u0020\u00A0\u00A0\u2028\u2029]
\b 匹配单词边界(word-boundary)
\B 匹配非单词边界
\0 匹配NUL字符
\n 匹配换行符
\f 匹配换页符
\r 匹配回车符
\t 匹配制表符
\v 匹配垂直制表符
\xxx 匹配以八进制数xxx规定的字符
\xdd 匹配以十六进制数dd规定的字符
\uxxxx 匹配以十六进制数xxxx规定的Unicode字符

量词

量词作为一个正则表达式因子的后缀来决定这个因子应该被匹配的次数。(以下n为因子)

量词 描述
n+ 匹配任何包含至少一个n的字符串,等同于{1,}
n? 匹配任何包含零个或一个n的字符串,等同于{0,1}
n* 匹配任何包含零个或多个n的字符串,等同于{0,}
n{x} 匹配包含x个n的序列的字符串
n{x,y} 匹配包含x到y个n的序列的字符串
n{x,} 匹配包含至少x个n的序列的字符串
^n 匹配任何开头为n的字符串
n$ 匹配任何结尾为n字符串
?=n 匹配任何其后紧接制定字符串n的字符串
?!n 匹配任何其后没有紧接制定字符串n的字符串

分组

捕获型

一个捕获型分组是一个被包围在圆括号中的正则表达式选择。任何匹配这个分组的字符将被捕获。每个捕获型分组都被指定了一个数字。

非捕获型

非捕获型分组有一个(?:前缀。非捕获型分组仅做简单的匹配;并不会捕获所匹配的文本。这会有微弱的性能优势。非捕获型分组不会干扰捕获型分组的编号。

向前正向匹配

向前负向匹配

栗子

该栗子用来匹配URL的正则表达式。代码如下表示:

var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9A-Za-z\.-]+)(?::(\d+))?(?:\/([^#?]*))?(?:\?([^#]*))?(?:#(.*))?$/;

var url = 'https://sobird.me/path/test?a=b&b=c#hash';
var result = parse_url.exec(url);

// ["https://sobird.me/path/test?a=b&b=c#hash", "https", "//", "sobird.me", undefined, "path/test", "a=b&b=c", "hash"]