原文地址:正则表达式
- 被用于
RegExp
的exec
和test
方法, 以及String
的match
、replace
、search
和split
方法 - 在加载脚本后,正则表达式字面值提供正则表达式的编译。当正则表达式保持不变时,使用此方法可获得更好的性能
\
- 在非特殊字符之前的反斜杠表示下一个字符是特殊的,不能从字面上解释。例如,没有前面''的'b'通常匹配小写'b',无论它们出现在哪里。如果加了'',这个字符变成了一个特殊意义的字符,意思是匹配一个字符边界
- 反斜杠也可以将其后的特殊字符,转义为字面量。例如,模式 /a*/ 代表会匹配 0 个或者多个 a。相反,模式 /a\*/ 将 '*' 的特殊性移除,从而可以匹配像 "a*" 这样的字符串
- 使用 new RegExp("pattern") 的时候不要忘记将 \ 进行转义,因为 \ 在字符串里面也是一个转义字符
^
- 匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置
$
- 匹配输入的结束。如果多行标示被设置为 true,那么也匹配换行符前的位置
*
- 匹配前一个表达式0次或多次。等价于 {0,}
+
- 匹配前面一个表达式1次或者多次。等价于 {1,}
?
- 匹配前面一个表达式0次或者1次。等价于 {0,1}
- 如果紧跟在任何量词
*、 +、? 或 {}
的后面,将会使量词变为非贪婪的(匹配尽量少的字符),和缺省使用的贪婪模式(匹配尽可能多的字符)正好相反- 对 "123abc" 应用 /\d+/ 将会返回 "123",如果使用 /\d+?/,那么就只会匹配到 "1"
.
- (小数点)匹配除换行符之外的任何单个字符
(x)
- 匹配 'x' 并且记住匹配项,括号被称为捕获括号
(?:x)
- 匹配 'x' 但是不记住匹配项。这种叫作非捕获括号
x(?=y)
- 匹配 'x' 仅仅当 'x' 后面跟着 'y'。这种叫做正向肯定查找
x(?!y)
- 匹配 'x' 仅仅当 'x' 后面不跟着 'y'。这个叫做正向否定查找
x|y
- 匹配 'x' 或者 'y'
{n}
- n 是一个正整数,匹配了前面一个字符刚好发生了 n 次
{n,m}
- n 和 m 都是整数。匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是0, 这个值被忽略
[xyz]
- 一个字符集合。匹配方括号的中任意字符,包括转义序列。可以使用破折号(-)来指定一个字符范围。对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转义,不过转义也是起作用的
[^xyz]
- 一个反向字符集。它匹配任何没有包含在方括号中的字符。可以使用破折号(-)来指定一个字符范围。任何普通字符在这里都是起作用的
\d
- 匹配一个数字字符,等价于
[0-9]
- 匹配一个数字字符,等价于
\D
- 匹配一个非数字字符,等价于
[^0-9]
- 匹配一个非数字字符,等价于
\n
- 匹配一个换行符 (U+000A)
\r
- 匹配一个回车符 (U+000D)
\s
- 匹配一个空白字符,包括空格、制表符、换页符和换行符
- 等价于
[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
\S
- 匹配一个非空白字符
- 等价于
[^ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
\w
- 匹配一个单字字符(字母、数字或者下划线)
- 等价于
[A-Za-z0-9_]
\W
- 匹配一个非单字字符
- 等价于
[^A-Za-z0-9_]
\n
- 在正则表达式中,它返回最后的第 n 个子捕获匹配的子字符串(捕获的数目以左括号计数)
- 正则表达式标志:
g
- 全局搜索
i
- 不区分大小写搜索
m
- 多行搜索