-
Notifications
You must be signed in to change notification settings - Fork 7
正则表达式
sobird edited this page Apr 24, 2016
·
12 revisions
正则表达式是一门简单语言的语法规范。它以方法的形式被用于对字符串中的信息进行查找、替换和提取操作。可处理正则表达式的方法有 regexp.exec
、regexp.test
、string.match
、string.replace
、string.search
和string.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"]