jtwang7 / JavaScript-Note

JavaScript学习笔记
10 stars 2 forks source link

正则表达式 #74

Open jtwang7 opened 2 years ago

jtwang7 commented 2 years ago

正则表达式

正则表达式中使用 ES6 模板字符串

通过字面量方式 / xxx / 声明的正则,是不能够使用模板字符串的。 在正则校验模板中使用模板字符串的正确方式:new RegExp()

let count = 1;
let reg = new RegExp(`a${count}`, 'gi')

关于 RegExp 构造函数的使用见:RegExp

常用的正则表达式汇总

❇️ 验证数字:^[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]*$

❇️ 验证非负整数(正整数 + 0) ^\d+$

❇️ 验证非正整数(负整数 + 0) ^((-\d+)|(0+))$

❇️ 验证长度为3的字符:^.{3}$

❇️ 验证由26个英文字母组成的字符串:^[A-Za-z]+$

❇️ 验证由26个大写英文字母组成的字符串:^[A-Z]+$

❇️ 验证由26个小写英文字母组成的字符串:^[a-z]+$

❇️ 验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

❇️ 验证由数字、26个英文字母或者下划线组成的字符串:^\w+$

❇️ 验证用户密码:^[a-zA-Z]\w{5,17}$

正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。

❇️ 验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+

❇️ 验证汉字:^[\u4e00-\u9fa5],{0,}$

❇️ 验证Email地址:/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/

❇️ 验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$

❇️ 验证电话号码:^(\d3,4\d3,4|\d{3,4}-)?\d{7,8}$

--正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。

❇️ 验证身份证号(15位或18位数字):^\d{15}|\d{}18$

❇️ 验证一年的12个月:^(0?[1-9]|1[0-2])$

正确格式为:“01”-“09”和“1”“12”

❇️ 验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$

正确格式为:01、09和1、31。

❇️ 整数:^-?\d+$

❇️ 非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$

❇️ 正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

❇️ 非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$

❇️ 负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

❇️ 浮点数 ^(-?\d+)(\.\d+)?$

❇️ 邮箱 ^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$

jtwang7 commented 1 year ago

🌰 正则表达式实例

获取路径文件名

// 读取 '/Users/Profile/data-progress/data/trajs/399313_plot.txt'

const id = /\/([^\/]*)\_plot\.txt$/.exec(url)[1]

// 返回
// id = '399313'

🔥 解析 \/([^\/]*)$ 这个模式可以分为两个部分:\/([^\/]*)$

因此,整个正则表达式的含义是:匹配字符串结尾处以斜杠字符 / 开头,后面跟着任意字符零次或多次的字符串,()将捕获与其内部表达式相匹配的字符串。

获取文件名(不带后缀)

const filename = file_path.replace(/(.*\/)*([^.]+).*/ig,"$2");