比较常用的几个规则
特殊元字符:
\d 代表数字
\D 代表除了数字以外的其他字符
\w 代表数字或者字母或下划线
\W 代表数字字母下划线以外的其他字符
^ 代表以什么开头 若写就得在正则的最前边
$ 代表以什么结尾 若写就得在正则的最后边
[ab] a或b /^[xy]$/: 要不就是以x开头结果 要不就是以y开头结尾
[^ab] 除了ab以外的其他字符
[a-z] 大白话就是小写字母
[A-Z] 代表大写字母
[a-zA-Z] 代表所有字母
a|b a或b
. 代表除了换行以外的其他字符 点若在[]里边 就代表点本身了;
() 提升优先级 分组(捕获时用到的概念)
/^11|12$/ 以11开头或者以12结尾的字符串
/^(11|12)$/ 要不11 要不12
量词元字符 (量:数量) 用在要修饰的字符的后边
? /\d?/ 代表前边的字符出现0或1次
+ 代表前边的字符出现1到多次
* 代表前边的字符出现0到多次
{n} 代表前边的字符出现n次
{n,} 代表前边的字符出现n到多次
{n,m} 代表前边的字符出现n到m次
修饰符
g global 全局匹配 最多用于捕获 匹配时很少用
i ignoreCase 忽略大小写
m multiline 多行匹配
1. 使用正则的方法写出一个手机号码格式
let reg = /^1[3-9]\d{9}$/
注释:以1开头,3,4,5,6,7,8,9中的一位,9位数字 结束
2.邮箱验证
// 只验证QQ邮箱:let reg = /^1[3-9]\d{9}$/
let reg = /^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
注释:w代表数字或者字母或者下划线;
+代表前面的字符出现1到多次;
*代表前面的字符出现0到多次;
<input type="text" placeholder="输入QQ邮箱" id='inp2'>
<button id='btn'>登录</button>
btn.onclick = function () {
let val = inp.value; // 用户输入的内容
let val2 = inp2.value;
let bol2 = reg2.test(val2)
if (bol2) {
console.log(val2)
} else {
alert('邮箱不合法')
}
}
3.验证是否位有效数字
思路:
//+-可有可无 有的话一定是在前边
// 小数部分可有可无 有的话一定在后边
// 单个整数可以是 0 ,多位数不能是0开头
// 多少位不限制
let reg = /^[+\-]?(\d|[1-9]\d+)(\.\d+)?$/
解析:+-号有的话就在前面,前面的1-9数字出现1到多次,.数字出现1到多次
4. 验证密码 “数字、字母、下划线 6-16位”
let reg = /^\w{6,16}$/
解析:以数字或字母或下划线开头6到16位
5. 验证真实姓名
华夏姓名一般是由2到4位汉子组成
let reg = /^[\u4E00-\u9FA5]{2,}(·[\u4E00-\u9FA5]{2,})?$/;
console.log(reg.test('赵')); //false
console.log(reg.test('赵四'));
console.log(reg.test('尼古拉斯·赵四'));
console.log(reg.test('巴啦啦·迪力木拉提'));
console.log(reg.test('刘伟'));
console.log(reg.test('王光明森'));
6.验证身份证号
let reg = /^\d{17}(\d|X|x)$/
解析:前面17位是数字,最后一位是X或x或数字
升级版:使用分组获取,正则在捕获的时候,除了可以把大正则匹配的信息捕获到,而且还可以把正则中每一个小分组匹配的信息单独捕获到;如果写了分组,但是不想在捕获的时候捕获,需要加 ?:
let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d)(?:\d|X|x)$/;
let str = '130828199012040617';
console.log(reg.exec(str));
结果是:['130828199012040617','130828','1990','12','04','1'...]
7.属性
lastIndex:
let reg=/a/ig;
let str="hello a A one A";
do{
console.log(reg.lastIndex);//0 7 9 15
}while(reg.test(str));
Source: 正则的内容
let reg=/abc\d{3}/ig;
let str="hello a A one A";
console.log(reg.test(str));
console.log(reg.source);
8.
replace(旧内容,新内容) 替换
var str="red one blue two green scee";
var newstr=str.replace(/(red|blue|green)/ig,"<b style='color:$1;'>$1</b>");
document.write(newstr);
9.
- match() 匹配
var str="<b>hello</b> one <b>two</b> scee";
?:
作用一: 如果左边是一个非量词元素,那么它本省代表量词,出现零或一次
作用二: 如果左边是一个量词元素,则是取消正则捕获的贪婪性
var newstr=str.match(/<b>.*?<\/b>/ig);
console.log(newstr);//惰性匹配:尽可能短的匹配 ["<b>hello</b>", "<b>two</b>"]
var newstr=str.match(/<b>.*<\/b>/ig);
console.log(newstr);//贪婪匹配:尽可能长的匹配 ["<b>hello</b> one <b>two</b>"]
10.search() 查询(不与g 一块使用)
var str="hello do Hello two HEllo scee do one";
var reg=/\bdo\b/ig;
while(reg.test(str)){
var newstr=str.search(reg);
console.log(newstr);//6
}
11.split() 分隔,转化成数组
var str="hello world one two";
var arr=str.split(/\s+/);
console.log(arr);// ["hello", "world", "one", "two"]