js 正则
<!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>