正则
正则表达式(英语:Regular Expression,常简写为 regex、regexp 或 RE),是用于匹配字符串中字符组合的模式。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式通常被用来检索、替换那些符合某个模式的文本。
           
创建
使用正则表达式字面量创建:
调用 RegExp 对象的构造函数:
| 1
 | var re = new RegExp('ab+c', 'ig')
 | 
修饰符:
| 修饰符 | 描述 | 
| i | 忽略大小写 | 
| g | 全局匹配 | 
| m | 多行匹配 | 
基础
表达式
| 表达式 | 描述 | 
| [abc] | 查找方括号之间的任何字符。 | 
| [^abc] | 查找任何不在方括号之间的字符。 | 
| [0-9] | 查找任何从 0 至 9 的数字。 | 
| [a-z] | 查找任何从小写 a 到小写 z 的字符。 | 
| [A-Z] | 查找任何从大写 A 到大写 Z 的字符。 | 
| [A-z] | 查找任何从大写 A 到小写 z 的字符。 | 
| (red|blue|green) | 查找任何以 | 分隔的选项。 | 
元字符
| 元字符 | 描述 | 
| . | 查找单个字符,除了换行和行结束符。 | 
| \w | [0-9a-zA-Z_],字符数字下划线,\W 则相反。 | 
| \d | [0-9],数字,\D 则是非数字。 | 
| \s | 查找空白字符。\S 非空字符。 | 
| \b | 匹配单词边界。\B 非单词边界。 | 
| \n | 换行符。 | 
| \r | 回车符。 | 
| \t | 制表符。 | 
| \f | 换页符。 | 
| \r | 回车符。 | 
| \xxx | 八进制数 xxx 规定的字符。\101 = ‘A’ | 
| \xdd | 以十六进制数 dd 规定的字符。\x41 = ‘A’ | 
| \uxxxx | 十六进制数 xxxx 规定的 Unicode 字符。/\u0041/ = ‘A’,/\u4f60/ = ‘你’ | 
量词
| 量词 | 描述 | 
| {n} | 包含 n 个 | 
| {n,} | 至少 n 个 | 
| {n,m} | 至少 n 个,最多 m 个 | 
| + | {1,} 至少一个 | 
| * | {0,} 零个或多个 | 
| ? | {0,1} 零个或一个 | 
| ^s | 任何开头为 s 的字符串 | 
| s$ | 任何结尾为 s 的字符串 | 
| ?=s | 任何其后紧接指定字符串 s 的字符串 | 
| ?!s | 任何其后没有紧接指定字符串 n 的字符串 | 
常用函数
- String.search(): 检索索引 => index
- String.replace(): 替换 => String
- String.split(): 分割 => Array
- String.match(): 检索返回内容 => Array
- RegExp.test(): 检索是否存在 => Boolean
- RegExp.exec(): 检索返回内容 => Array(伪数组,包含索引等信息)
String.search()
检索与正则表达式相匹配的索引值。(检索不到返回-1)
| 12
 
 | var str = 'Hello World!!'console.log(str.search(/world/i))
 
 | 
String.replace()
替换与正则表达式匹配的字符串。(检索不到返回原字符串)
| 12
 3
 
 | var str = 'Hello World!!'var res = str.replace(/world/i, 'Vincent')
 
 
 | 
String.split()
把字符串分割为字符串数组。(检索不到返回包含原字符串的数组)
| 12
 3
 
 | var str = '1a2b3c4'var res = str.split(/[A-z]/)
 
 
 | 
String.match()
返回符合条件的内容数组。
检索不到返回 null
| 12
 3
 4
 5
 6
 7
 
 | var str = '1a2b3c4d5e6f7'var res = str.match(/[A-z]/g)
 
 
 var res = str.match(/[A-z]/)
 
 
 
 | 
RegExp.test()
正则的一个方法,检测一个字符串是否匹配。
返回 true/false。
| 12
 3
 4
 
 | var re = /world/re.test('Hello world!!')
 
 ;/world/.test('hello world!!')
 
 | 
RegExp.exec()
正则的一个方法,检索字符串中的正则表达式的匹配。
返回一个伪数组,包含匹配内容、索引、输入;
匹配不到返回 null
| 12
 3
 4
 
 | ;/\d+/.exec('qq123456')
 
 
 
 | 
exec()捕获问题:
| 12
 3
 4
 5
 6
 
 | var str = 'duffy2016peixun2017'var reg = /\d+/
 console.log(reg.lastIndex)
 console.log(reg.exec(str))
 console.log(reg.lastIndex)
 console.log(reg.exec(str))
 
 | 
| 12
 3
 4
 5
 6
 
 | var str = 'duffy2016peixun2017'var reg = /\d+/g
 console.log(reg.lastIndex)
 console.log(reg.exec(str))
 console.log(reg.lastIndex)
 console.log(reg.exec(str))
 
 | 
常用正则表达式
正则测试工具网站:RegExr
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 
 | 字符串类:中文字符: [u4e00-u9fa5]
 中文、英文、数字包括下划线: ^[\u4E00-\u9FA5A-Za-z0-9_]+$
 Email地址: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
 手机号: ^([1][3,4,5,6,7,8,9])\d{9}$)
 QQ号: ^[1-9][0-9]{4,}$
 用户名是否合法(字母开头,允许字母数字下划线,5-16位): ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
 
 数字类:
 只能输入数字:^[0-9]*$
 只能输入n位的数字:^d{n}$
 只能输入至少n位数字:^d{n,}$
 只能输入m-n位的数字:^d{m,n}$
 只能输入零和非零开头的数字:^(0|[1-9][0-9]*)$
 只能输入有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
 只能输入有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
 只能输入非零的正整数:^+?[1-9][0-9]*$
 只能输入非零的负整数:^-[1-9][0-9]*$
 只能输入长度为3的字符:^.{3}$
 只能输入由26个英文字母组成的字符串:^[A-Za-z]+$
 只能输入由26个大写英文字母组成的字符串:^[A-Z]+$
 只能输入由26个小写英文字母组成的字符串:^[a-z]+$
 只能输入由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
 只能输入由数字、26个英文字母或者下划线组成的字符串:^w+$
 
 | 
总结于 W3Cschool - 常用正则表达式大全
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 
 | let number = '12345678.2333'
 number.replace(/(?=(?!^)(?:\d{3})+(?:\.|$))(\d{3}(\.\d+$)?)/g, ',$1')
 
 
 let url = 'https://vincef0ng.cn/post/js-regexp-guide/index.html'
 url.replace(/(.*\/){0,}(.*)/gi, '$2')
 
 
 function isDecimal(strValue) {
 var objRegExp = /^\d+\.\d+$/
 return objRegExp.test(strValue)
 }
 
 
 function ischina(str) {
 var reg = /^[\u4E00-\u9FA5]{2,4}$/
 return reg.test(str)
 }
 
 
 function isStudentNo(str) {
 var reg = /^[0-9]{8}$/
 return reg.test(str)
 }
 
 
 function isTelCode(str) {
 var reg = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/
 return reg.test(str)
 }
 
 
 function IsEmail(str) {
 var reg = /^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/
 return reg.test(str)
 }
 
 | 
参考文档: