正则
正则表达式(英语: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)
1 2
| var str = 'Hello World!!' console.log(str.search(/world/i))
|
String.replace()
替换与正则表达式匹配的字符串。(检索不到返回原字符串)
1 2 3
| var str = 'Hello World!!' var res = str.replace(/world/i, 'Vincent')
|
String.split()
把字符串分割为字符串数组。(检索不到返回包含原字符串的数组)
1 2 3
| var str = '1a2b3c4' var res = str.split(/[A-z]/)
|
String.match()
返回符合条件的内容数组。
检索不到返回 null
1 2 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
。
1 2 3 4
| var re = /world/ re.test('Hello world!!')
;/world/.test('hello world!!')
|
RegExp.exec()
正则的一个方法,检索字符串中的正则表达式的匹配。
返回一个伪数组,包含匹配内容、索引、输入;
匹配不到返回 null
1 2 3 4
| ;/\d+/.exec('qq123456')
|
exec()捕获问题:
1 2 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))
|
1 2 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
1 2 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 - 常用正则表达式大全
1 2 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) }
|
参考文档: