遵循规则如下:
1. 稍微复杂的字符,如标点符号和空格、制表符,需要用反斜杠(\)打头,\n表示新行,\r表示回车,\t制表符,\s表示空格;
2. 匹配规则如下:
[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符
a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符
每一个方框内只能匹配一个,即[a-z][0-9]能匹配a2,不能匹配ab2;
3. 正则表达式以"^"表示开头,以"$"表示结尾,如果在方括号内部有"^"符号,表示“非”,“排除”的意思,如下所示:
[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符
a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符
4. 方框后接{2,4},表示有2-4个这样的数,如果是{0,}表示0个或多个;
5. 前瞻: exp1(?=exp2) 查找exp2前面的exp1
后顾: (?<=exp2)exp1 查找exp2后面的exp1
负前瞻: exp1(?!exp2) 查找后面不是exp2的exp1
负后顾: (?<!=exp2)exp1 查找前面不是exp2的exp1
6. 匹配多个相同的方框:
^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]{0,}$ // 所有的正整数
^\-{0,1}[0-9]{1,}$ // 所有的整数
^[-]?[0-9]+\.?[0-9]+$ // 所有的浮点数
a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]{0,}$ // 所有的正整数
^\-{0,1}[0-9]{1,}$ // 所有的整数
^[-]?[0-9]+\.?[0-9]+$ // 所有的浮点数
其中“?”表示可有可无;
“0个或多个”,即{0,}可表示为“*”;
一个或多个即{1,}可表示为“+”
7. 下列元字符需要进行转义
( [ { \ ^ $ | ) ? * + .]}
8. 其他字符集(注意括号)
特别字符 | 描述 |
---|---|
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。 |
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。 |
* | 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。 |
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。 |
. | 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。 |
[ | 标记一个中括号表达式的开始。要匹配 [,请使用 \[。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。 |
{ | 标记限定符表达式的开始。要匹配 {,请使用 \{。 |
| | 指明两项之间的一个选择。要匹配 |,请使用 \|。 |
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换行符之外的任意字符,等价于[^\n]
\w 任何单字字符, 等价于[a-zA-Z0-9]
\W 任何非单字字符,等价于[^a-zA-Z0-9]
\s 任何空白符,等价于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]
\d 任何数字,等价于[0-9]
\D 除了数字之外的任何字符,等价于[^0-9]
\b的用法:
"nice to meet you".match(/\bnice\b/),输出如下:
["nice", index: 0, input: "nice to meet you", groups: undefined]
"nice to meet you".match(/o\b meet\b /),输出如下:
["o meet ", index: 6, input: "nice to meet you", groups: undefined]
\b指的是如nice中的‘n’和‘i’之间的看不见的字符,所以第一个输出匹配的是:第一个'\b'的前面没有字符,后面为字符'n',第二个'\b'的前面为字符'e',后面没有字符。所以匹配nice;
第二个输出匹配的是:第一个'\b'的前面为字符o,后面为空格,第二个'\b'的前面为字符't',后面为空格。所以匹配a nice (注:nice后有空格)。
正则表达式的写法举例:
/ pattern / flags ;flags支持3个标志,分别为g(gobal全局内)、i(case-insensitive不区分大小写)、m(multiline)多行匹配
1. 选取单词
例如:如果我们想要找到字符串The dog chased the cat
中单词the
,我们可以使用下面的正则表达式:/the/gi
我们可以把这个正则表达式分成几段:
/
是这个正则表达式的头部
the
是我们想要匹配的模式
/
是这个正则表达式的尾部
g
代表着 global
(全局),意味着返回所有的匹配而不仅仅是第一个。
i
代表着忽略大小写,意思是当我们寻找匹配的字符串的时候忽略掉字母的大小写。
2. 选取数值
在JavaScript中, 数字选择器类似于:/\d/g
。
在选择器后面添加一个加号标记(+
),例如:/\d+/g
,它允许这个正则表达式匹配一个或更多数字。
尾部的g
是'global'的简写,意思是允许这个正则表达式 找到所有的匹配而不是仅仅找到第一个匹配。
3. 选取空白字符
我们也可以使用正则表达式选择器 \s
来查找一个字符串中的空白。
空白字符有 " "
(空格符)、\r
(回车符)、\n
(换行符)、\t
(制表符) 和\f
(换页符)。
空白正则表达式类似于:
/\s+/g