先发一个比较666的正则表达式:
Array.reverse().join(",").match(/([^,](?!.*\1)/ig).reverse();
这个是数组去重的正则表达式,面试的时候用这个绝对一级棒!~
具体说一下正则表达式的用法
1.在表达式中有特殊意义,需要添加 “\” 才能匹配该字符本身的字符汇总
^: 匹配的是字符的开头,在多行检索中,匹配的是一行的开头 。要匹配 “^” 字符本身,请使用 “\^”
注:如果^是在中括号中,代表匹配非中括号中的所有内容,例如[^\d]匹配的是所有非数字的字符。
$: 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾 。要匹配 “$” 字符本身,请使用 “\$”
( ): 分组.将几个项目分为一个单元.这个单元可由 *、+、?和|等符号使用,而且还可以记住和这个组匹配的字符以供此后引。要匹配小括号,请使用 “\(” 和 “\)”
[ ]: 用来自定义能够匹配 ‘多种字符’ 的表达式。要匹配中括号,请使用 “\[” 和”\ ]”
{ }:修饰匹配次数的符号。要匹配大括号,请使用 “\{” 和 “\}”
.:匹配除了换行符(/n)以外的任意一个字符。要匹配小数点本身,请使用 “\.”
?:修饰匹配次数为 0 次或 1 次。要匹配 “?” 字符本身,请使用 “\?”
+: 修饰匹配次数为至少 1 次。要匹配 “+” 字符本身,请使用 “\+”
*: 修饰匹配次数为 0 次或任意次。要匹配 “*” 字符本身,请使用 “\*”
|: 左右两边表达式之间 “或” 关系。匹配 “|” 本身,请使用 “\|”
2.转义字符
\f: 换页符
\n: 换行符
\r: 回车
\t: 制表符
\v: 垂直制表符
\b: 匹配的是一个词语的边界.简而言之就是位于字符\w 和 \w之间的位置(注意:[\b]匹配的是退格符)
\B: 匹配的是非词语的边界的字符
\ /: 一个 “/” 直接量
\ \: 一个”\”直接量
3.能够与’多种字符’匹配的表达式
正则表达式中的一些表示方法,可以匹配 ‘多种字符’ 其中的任意一个字符。比如,表达式 “\d” 可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。这就好比玩扑克牌时候,大小王可以代替任意一张牌,但是只能代替一张牌。
[…]: 位于括号之内的任意字符
例如[abc]匹配的是a或b或c,[a-z]匹配的是a到z之间的任意一个字符。
[^…]: 不在括号之中的任意字符
这个也好理解,比如[abc]就是匹配除了a或b或c之外的任意字符。
.: 除了换行符之外的任意字符,等价于[^\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]
4.修饰匹配次数的特殊符号
{n}: 匹配前一项n次,比如:”\w{2}”相当于”\w\w”;”a{5}” 相当于”aaaaa”
{m,n}: 匹配前一项至少m次,至多n次,比如:”ba{1,3}”可以匹配”ba”或”baa”或”baaa”
{m,}: 匹配前一项至少m次,比如:”\w\d{2,}”可以匹配”a12”,”_456”,”M12344”…
?: 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1}
+: 匹配前一项1次或多次,等价于{1,}
*: 匹配前一项0次或多次.等价于{0,}