ECMAScript 通过 RegExp 类型来支持正则表达式。使用下面类似 Perl 的语法,就可以创建一个正 则表达式。
var expression = /pattern/flags ;
其中(pattern)模式部分可以是任何简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找一级反向引用。每个正则都可带有一个或多个标志(flags),用以标明正则表达式的行为。
正则表达式的匹配模式支持下列3个标志:
- g:表示全局模式,即模式将被应用于所有字符串,而非在发现第一匹配项时立即停止;
- i:表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写;
- m:表示多行模式,即在到达一行文本末尾时,还会继续查找下一行中是否存在于模式匹配的项。
- u统一; 将模式视为一组unicode代码点
- y黏; 仅匹配lastIndex目标字符串中此正则表达式的属性所指示的索引(并且不会尝试从任何后来的索引进行匹配)
因此,一个正则表达式(常见)就是一个模式与上述3个(g.i.m)标志的组合体
创建方法
文字符号
/ab+c/i;
构造函数
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');
/*
* 匹配字符串中所有"at"的实例
*/
var pattern1 = /at/g;
/*
* 匹配第一个"bat"或"cat",不区分大小写
*/
var pattern2 = /[bc]at/i;
/*
* 匹配所有以"at"结尾的 3 个字符的组合,不区分大小写
*/
var pattern3 = /.at/gi;
当使用构造函数时,正常的字符串转义规则(在包含在字符串中时在\之前的特殊字符)是必需的。例如,以下是等价的:
var re = /\w+/;
var re = new RegExp('\\w+');
字面量模式 | 等价的字符串 |
---|---|
/[bc]at/ | "\[bc\]at" |
/.at/ | "\.at" |
/name/age/ | "name\/age" |
/\d.\d{1,2}/ | "\d.\d{1,2}" |
/\w\hello\123/ | "\w\\hello\\123" |
特殊字符在正则表达式中的含义
字符类别
字符 | 含义 |
---|---|
. | (点号,小数点) 匹配任意单个字符,但是行结束符除外: 在字符集中,点( . )失去其特殊含义,并匹配一个字面点( . )。 需要注意的是, 例如, |
\d | 匹配任意阿拉伯数字。等价于 例如, |
\D | 匹配任意一个不是阿拉伯数字的字符。等价于 例如, |
\w | 匹配任意来自基本拉丁字母表中的字母数字字符,还包括下划线。等价于 例如, |
\W | 匹配任意不是基本拉丁字母表中单词(字母数字下划线)字符的字符。等价于 例如, |
\s | 匹配一个空白符,包括空格、制表符、换页符、换行符和其他 Unicode 空格。 等价于 例如 |
\S | 匹配一个非空白符。等价于 例如, |
\t | 匹配一个水平制表符(tab) |
\r | 匹配一个回车符(carriage return) |
\n | 匹配一个换行符(linefeed) |
\v | 匹配一个垂直制表符(vertical tab) |
\f | 匹配一个换页符(form-feed) |
[\b] | 匹配一个退格符(backspace)(不要与 \b 混淆) |
\0 | 匹配一个 NUL 字符。不要在此后面跟小数点。 |
\cX | 例如, |
\xhh | 匹配编码为 hh (两个十六进制数字)的字符。 |
\uhhhh | 匹配 Unicode 值为 hhhh (四个十六进制数字)的字符。 |
\ | 对于那些通常被认为字面意义的字符来说,表示下一个字符具有特殊用处,并且不会被按照字面意义解释。 例如 或 对于那些通常特殊对待的字符,表示下一个字符不具有特殊用途,会被按照字面意义解释。 例如,* 是一个特殊字符,表示匹配某个字符 0 或多次,如 |
. 元字符用于查找单个字符,除了换行和行结束符。
语法 new RegExp("regexp.") 直接量语法:/regexp./
var naiStr01 = "I'm nana,also nainai,please search happy,hpap,hhapp!";
naiStr01.match(/h.p/g)
(2) ["hap", "hap"]
\d 元字符用于查找数字字符。
语法 new RegExp("\d")直接量语法:/\d/
var naiStr02 = "I'm nana, 1,0.1,27,100%!@";
naiStr02.match(/\d/g)
(8) ["1", "0", "1", "2", "7", "1", "0", "0"]
\D 元字符用于查找非数字字符。
语法 new RegExp("\D")直接量语法:/\D/
var naiStr02 = "I'm nana, 1,0.1,27,100%!@";
naiStr02.match(/\D/g)
(17) ["I", "'", "m", " ", "n", "a", "n", "a", ",", " ", ",", ".", ",", ",", "%", "!", "@"]
\w 元字符用于查找单词字符。
语法 new RegExp("\w")直接量语法:/\w/
var naiStr02 = "I'm nana, 1,0.1,27,100%!@";
naiStr02.match(/\w/g)
(14) ["I", "m", "n", "a", "n", "a", "1", "0", "1", "2", "7", "1", "0", "0"]
\W 元字符用于查找非单词字符。
单词字符包括:a-z、A-Z、0-9,以及下划线。
语法 new RegExp("\W")直接量语法:/\W/
var naiStr02 = "I'm nana, 1,0.1,27,100%!@";
naiStr02.match(/\W/g)
(11) ["'", " ", ",", " ", ",", ".", ",", ",", "%", "!", "@"]
\s 元字符用于查找空白字符。
空白字符可以是: 空格符 (space character) 制表符 (tab character) 回车符 (carriage return character) 换行符 (new line character) 垂直换行符 (vertical tab character) 换页符 (form feed character)
语法 new RegExp("\S")直接量语法:/\s/
var naiStr02 = "I'm nana, 1,0.1,27,100%!@";
naiStr02.match(/\s/g)
(2) [" ", " "]
\S 元字符用于查找非空白字符。
语法 new RegExp("\S")直接量语法:/\S/