<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>正则</title>
</head>
<!--正则
一、特殊符号
1、\转义字符
2、^ 开头
3、$结尾
二、次数量词
*:0次到多次
?:0次或1次
+:1次或多次
{m}:m次
{m,n}:m到n次
三、
.:除了\n(换行)以外的任意字符
():分组 把一个大正则划分成几个小正则
x|y:x或y中的一个
[a-zA-Z0-9]:
[xyz]:xyz三个以外的任何字符
[^xyz]:除了xyz三个以外的任何字符
\d:0-9之间的一个数字
\D:除了0-9之间的数字以外的任何字符
\b:一个边界符
\w:数字 字母 下画线等同于[a-zA-Z0-9_]
\W:
\s:空白字符(空格 字表符 换页符)
注意中括号不能识别多于两位数[12]只能表示1或2 [12-54]只能表示1 或2-5之间的数 或4
-->
<body>
<script type="text/javascript">
var reg = /\d/
console.log(reg.test("ss23")); //true
console.log(reg.test("ss")); //false
reg = /^\d$/;
console.log(reg.test("ss")); //false
console.log(reg.test("34343")); //false
console.log(reg.test('5')); //true
reg = /^0.2$/; //表示以0开头2结尾的任何字符
console.log(reg.test("02")) //false
console.log(reg.test("0.2")) //true
//匹配正常数字
var num_reg = /^[-\+]?(\d|([1-9]\d+))(\.\d+)?$/ //匹配正常数字
console.log(num_reg.test("12.3"))
console.log(num_reg.test("12"))
console.log(num_reg.test("-12"))
console.log(num_reg.test("+12"))
console.log(num_reg.test("0.2"))
console.log(num_reg.test("0.2"))
console.log(num_reg.test("0244"))
// /\d+/这样创建不能进行字符串拼接
var name = "howhy"
var reg1 = /^\d+"+name+"\d+$/g //这样不行的所有变量都不进行解析都是原字符
console.log(reg1.test("222howhy5555")) //false
console.log(reg1.test('333""nameeee"888')) //true
reg2 = new RegExp("^\\d+" + name + "\\d+$", "g") //类创建参数都是字符串 所以可以进行字符串拼接但\d \w需要\\d \\w
console.log(reg2.test("222howhy5555")) //true
console.log(reg2.test('333""nameeee"888')) //false
//匹配18-65年龄的数字 分为三段 18-19 20-59 60-65
var age_reg = /^(1[8-9]|[2-5]\d|6[0-5])$/;
//验证邮箱
var email_reg = /[\w.-]+@[0-9a-zA-Z]+(\.[a-zA-Z]{2,4}){1,2}/
//中国姓名
var name_reg = /^[\u4e00-\u9fa5]{2,4}$/
//身份证
var card_reg = /^\d{17}(\d|X)$/
//exec数组捕获
//1、懒惰性(没有加g每次lastIndex都从0开始 若加g则每次从上一次匹配后开始) 每次只能捕获第一个匹配的内容,(i 忽略大小写 g全局匹配)
//2、贪婪性 每次匹配结果都是最长的 在量词后加问号
var reg10 = /\d+/g;
// var ret = reg10.exec("aaa1231www888") //1231
// console.log(ret)
var myArray;
var retArr = [];
while ((myArray = reg10.exec("aaa1231www888")) !== null) {
retArr.push(myArray[0])
}
console.log(retArr); //[1231,888]
//字符串match方法 会把所有结果匹配出来
var str = "444ssaa232aaz000"
console.log(str.match(reg10)) //["444", "232", "000"]
//分组 ?:只匹配不捕获
var reg11 = /^(\w)(\w)\2\1$/; //\2表示第二个\w就是f \1表示第1个\w就是a
console.log(reg11.test("affa")) //true
var reg12 = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(?:\d{2})(\d)(\d|X)$/
var str12 = "411321198510353238"
console.log(reg12.exec(str12)) //["411321198510353238", "41", "1321", "1985", "10", "35", "3", "8", index: 0, input: "411321198510353238", groups: undefined]
console.log(str12.match(reg12)) //["411321198510353238", "41", "1321", "1985", "10", "35", "3", "8", index: 0, input: "411321198510353238", groups: undefined]
//正则替换replace
var str13 = "howhyaawerhowhycccc";
console.log(str13.replace(/howhy/g, "4444"))
var str14 = "20201217"
var numDigit = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
str14 = str14.replace(/\d/g, function() {
var num = arguments[0];
console.log(num);
return numDigit[num];
})
console.log(str14)
var str15 = "my name is {0},my age is {1},i come from {2},i live in {3} now";
var arr15 = ["howhy", 22, "河南", "广东"];
var reg15 = /{(\d+)}/g;
console.log(str15.match(reg15))
str15 = str15.replace(reg15, function() {
console.log(arguments[1])
return arr15[arguments[1]]
})
console.log(str15)
//获取字符串出现最多的字符
var str16 = "hellomynameishowhyhhaa";
var reg16 = /[a-z]/gi;
var obj = {};
str16.replace(reg16, function() {
if (arguments[0] in obj) {
obj[arguments[0]] += 1;
} else {
obj[arguments[0]] = 1;
}
})
console.log(obj)
var max = 0;
for (let a in obj) {
if (obj[a] > max) {
max = obj[a]
}
}
console.log(max)
var str17 = "http://localhost/test?name=howhy&age=12&mid=33333";
var reg17 = /\??(\w+)=(\w+)&?/g;
var obj17 = {};
str17.replace(reg17, function() {
obj17[arguments[1]] = arguments[2];
})
console.log(obj17)
var str18 = "2020-2-8 11:20:30";
var reg18 = /(\d{4})-(\d{1,2})-(\d{1,2}) (\d{2}):(\d{2}):(\d{2})/g;
var dd = ["年", "月", "日", "时", "分", "秒"];
var str18_ret = "";
str18.replace(reg18, function() {
var argsArr = Array.prototype.slice.call(arguments, 1, 7)
for (let i in argsArr) {
console.log(argsArr[i])
if (argsArr[i] < 10) {
argsArr[i] = "0".concat(argsArr[i]);
}
str18_ret += argsArr[i] + dd[i];
}
})
console.log(str18_ret);
</script>
</body>
</html>