特殊字符
字符 | 含义 |
---|---|
^ | 输入的开始 |
$ | 输入的结束 |
* | 匹配前一个表达式0次或多次 |
+ | 匹配前面一个表达式1次或者多次 |
? | 匹配前面一个表达式0次或者1次 |
. | 匹配除换行符之外的任何单个字符 |
\b | 匹配一个词的边界 注意,一个匹配的词的边界并不包含在匹配的内容中 |
\d | 匹配一个数字 |
\s | 匹配一个空白字符,包括空格、制表符、换页符和换行符 |
\w | 匹配一个单字字符(字母、数字或者下划线) 等价于[A-Za-z0-9_] |
(x) | 匹配 ‘x’ 并且记住匹配项 |
(?:x) | 匹配 ‘x’ 但是不记住匹配项 这种叫作非捕获括号 使得你能够定义为与正则表达式运算符一起使用的子表达式 |
x(?=y) | 匹配’x’仅仅当’x’后面跟着’y’,这种叫做正向肯定查找 |
x(?!y) | 匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找 |
x|y | 匹配‘x’或者‘y’ |
{n,m} | 匹配前面的字符至少n次,最多m次 |
[xyz] | 一个字符集合 对于点(.)和星号(*)这样的特殊符号在一个字符集中没有特殊的意义 |
标志 | 描述 |
---|---|
g | 全局搜索 |
i | 不区分大小写搜索 |
m | 多行搜索 |
y | 执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志 |
正则表达式实例
- 检查用户名和密码是否符合要求
//用户名:中文、字母、数字、‘-’、‘_’,4到20个字符 /^[\u4e00-\u9fa5A-Za-z0-9-_]{4,20}$/.test(username); //密码:字母、数字、下划线,6到20个字符 /^\w{6,20}$/.test(password);
中文的正则表达式是
[\u4e00-\u9fa5]
,需要注意的是中文占两个字符。
- 检查字符串是否含有相邻的相同单词(例如’foo foo bar’,输出’true’)
/(\b\w+\b)\s+\1/.test('foo bar foo'); //结果 false
正则表达式
(x)
匹配 ‘x’ 并且记住匹配项。
- 输入一串数字,从低位开始,每三位添加一个逗号(例如输入10000,10,000)
'12334565632'.replace(/(\d)(?=(\d{3})+$)/g, "$1,"); //结果:"12,334,565,632"
正则表达式
x(?=y)
在MDN中对此的解释为:匹配’x’仅仅当’x’后面跟着’y’,这种叫做正向肯定查找。对于上述表达式,x
为(\d)
;y
代表(?=(\d{3})+$)
。翻译过来就是查找并记住一个数字,这个数字后面跟着数字数量为3的倍数,最后在符合条件的数字后面加逗号。如果直接写为/(\d){3}/g
,该表达式就会从前往后寻找3个3个的数字。
- 删除数组重复项
var names = ['Joan','Tina','Tom','Joan','Honey','Tom','Tom','Kitty']; var str = names.join(','); var re = /(\b\w+\b,?)(?=.*\1)/g; str = str.replace(re, ''); str.split(',');