1、字符含义
字符 | 说明 |
---|---|
\ | 在非特殊字符之前的反斜杠表示下一个字符是特殊字符,不能按照字面理解。 |
^ | 匹配输入的开始。如果多行标志被设置为 true,那么也匹配换行符后紧跟的位置。 |
$ | 匹配输入的结束。如果多行标志被设置为 true,那么也匹配换行符前的位置。 |
* | 匹配前一个表达式 0 次或多次。等价于 {0,}。 |
+ | 匹配前面一个表达式 1 次或者多次。等价于 {1,}。 |
? | 匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。 |
. | 默认匹配除换行符之外的任何单个字符。 |
\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]。 |
\d | 匹配 0-9 之间的任一数字,相当于 [0-9] |
\D | 匹配所有 0-9 以外的字符,相当于 [^0-9] |
[\b] | 匹配一个退格(U+0008)。(不要和\b混淆了。) |
\b | 匹配一个词的边界。一个词的边界就是一个词不被另外一个“字”字符跟随的位置或者前面跟其他“字”字符的位置,例如在字母和空格之间。注意,匹配中不包括匹配的字边界。换句话说,一个匹配的词的边界的内容的长度是0。(不要和[\b]混淆了) |
\w | 匹配任意的字母、数字和下划线,相当于 [a-zA-Z0-9_] |
\w | 除所有字母、数字和下划线 以外的字符,相当于 [^a-zA-Z_] |
\s | 匹配空格(包括换行符、制表符、空格等),相当于 [\t\r\n\v\f] |
\S | 匹配非空格的字符,相当于 [^\t\r\n\v\f] |
{n} | n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。 |
{n,} | n 是一个正整数,匹配前一个字符至少出现了 n 次。 |
{n,m} | n 和 m 都是整数。匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是 0, 这个值被忽略。 |
x|y | 匹配‘x’或者‘y’。 |
(abc) | 优先级匹配,优先级最高;整体匹配。匹配 abc ,abc 是个整体 |
2、方法
2.1、正则表达式相应的方法
序号 | 方法(函数) | 说明 |
---|---|---|
1 | RegExp.prototype.exec() | exec() 方法在一个指定字符串 中执行一个搜索匹配。返回一个结果数组或null 。 |
2 | RegExp.prototype.test() | test() 方法执行一个检索,用来查看正则表达式与指定的字符串 是否匹配。返回 true 或 false 。 |
3 | String.prototype.split() | split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以一个指定的分割字串来决定每个拆分的位置。 |
4 | String.prototype.replace() | replace() 方法返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项。 |
5 | String.prototype.search() | search() 方法执行正则表达式和 String 对象之间的一个搜索匹配。 |
6 | String.prototype.matchAll() | matchAll() 方法返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器。 |
7 | String.prototype.match() | match() 方法检索返回一个字符串匹配正则表达式的结果。 |
2.2、相关链接链接
3、常用的正则集合
正则集合 | 功能说明 | result(结果) |
---|---|---|
/^[1-9]{1}\d{0,2}$/ | 校验1~3位纯数字,且第1位不能为0 | – |
/^[1-9]{1}[0-9]{0,2}$/ | 校验1~3位纯数字,且第1位不能为0 | – |
/^1[3|4|5|7|8]\d{9}$/ | 校验手机号 | – |
/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/ | 校验手机号 | – |
/^[a-zA-Z]\w{5,17}$/ | 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线) | – |
/^\d{6}$/ | 精确6位数数字密码强匹配 | – |
/^(-?\d{1,3})(\.\d{2})?$/ | 匹配1~3位正整数或者负整数,同时匹配2位小数 | – |
/^(0?[1-9]|1[0-2])$/ | 匹配12个月 | – |
/^((0?[1-9])|((1|2)[0-9])|30|31)$/ | 匹配1个月的31天 | – |
'可以交换微信号或者QQ号码?'.replace(/微信|qq/ig, '-') | 替换敏感词 | 可以交换–号或者–号码? |
'I miss you'.replace(/\s+/g, '') | 删除(替换)空格 | Imissyou |
'159你好357+-sdkflskfhlk258'.match(/\d+/g) | 截取所有数字 | [1,5,9,3,5,7,2,5,8] |
'I miss you 520 你好'.replace(/[^\a-\z\A-\Z]/g, '') | 只保留字母 | Imissyou |
'I miss you 520 你好'.replace(/[^0-9]/g, '') | 只保留数字 | 520 |
'I miss you'.replace(/\b[a-zA-Z]+\b/g, i => { return i.charAt(0).toUpperCase() + i.substring(1); }) | 单词首字母转大写 | I Miss You |
let a = '[0-9]', b = 'abc', reg = RegExp(a + b) | 在正则的两个斜杠间加变量 | – |
value.replace(/^[0]+[0-9]*|[^0-9]*$/, '') | 匹配正整数,且第一位不能0 | – |
new RegExp((.\*)(\${value.split('').join(')(.\*)(')})(.\*), 'i') | 模糊匹配 | 注意:正则需要使用 模板字符串 包裹 |
Number('id7'.replace(/[^0-9]/ig, '') | 截取字符串中的数字 | 7 |
list = str.split(/,\s*|\s*、\s*/).filter(s => !/^\d+/.test(s)); | ‘1、壹皇、2、文骏、3、谨易’ | [ “壹皇”, “文骏”, “谨易” ] |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |
– | – | – |