<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>正则表达式练习</title> </head> <style> ul{ list-style: decimal; } </style> <body> <div class="reg"> <h2>正则的元字符和修饰符</h2> <h3>修饰符</h3> <ul> <li>g(global):全局匹配</li> <li>i(ignoreCase):忽略大小写匹配</li> <li>m(multiline):多行匹配</li> </ul> <hr> <h3>元字符</h3> <p>[量词元字符]</p> <ul> <li>+:出现1-n次</li> <li>?:出现0-1次</li> <li>*: 出现0-n次</li> <li>{n}出现n次</li> <li>{n,}出现n到多次</li> <li>{n,m}出现n到m次</li> </ul> <hr> <p>[特殊意义的元字符]</p> <ul> <li>\:转义字符(把一个普通字符转变为有特殊意义的字符,或者把一个有意义字符转换为普通的字符)</li> <li>.:除了\n(换行符)以外的任意字符</li> <li>\d: 匹配一个0-9之间的数字</li> <li>\D:匹配任意一个非0-9之间的数字</li> <li>\w:匹配一个0-9或者_之间的字符</li> <li>\W:匹配一个非0-9或者_之间的字符</li> <li>\s: 匹配一个任意空白符</li> <li>\S: 匹配一个非任意空白符</li> <li>\b:匹配一个边界符</li> <li>\B:匹配一个非边界符</li> <li>x|y: 匹配x或者y中的一个</li> <li>[a-z]: 匹配a-z的任意字符</li> <li>[^a-z]: 匹配任意一个非a-z的字符</li> <li>[xyz]: 匹配x或者y或者z的一个字符</li> <li>[^xyz]: 匹配除了xyz以外的任意字符</li> <li>(): 正则的小分组,匹配一个小分组(小分组可以理解为大正则中的小正则)。小分组第二个作用:分组引用。第三个作用:分组捕获</li> <li>^:以某一个元字符开始</li> <li>$: 以某一个元字符结束</li> <li>?: :只匹配不捕获</li> <li>?=: 正向预查</li> <li>?!:负向预查</li> </ul> <br> <hr> <p>分组引用(\1 或者 \2... 出现第n个分组一模一样的内容)</p> <p> <span>var reg = /^([a-z])([a-z])\2([a-z])$/</span><br> <span>例如:foot,book,week,oppo,http</span> </p> <br> <hr> <p>分组捕获</p> <p>中括号出现的元字符,一般都代表本身的含义</p> <p>例如: <span>var reg = /^[.?+&]/; =>里边的四个元字符都是本身含义,例如:.就是小数点,不是所谓的任意字符</span> </p> </div> </body> <script type="text/javascript"> // var reg = /^$/ // 俩斜杠之间包含的一些内容就是正则,俩个斜杠之间包含的全部内容都是元字符 // $ 匹配字符串的结尾位置 // * 匹配前面的子表达式0次或者多次 // + 匹配前面的子表达式1次或者多次 // ? 匹配子表达式0次或者1此次 例如do(es)? 可以匹配'do'、'does'、'doytss'中的do // {n} n是一个非负整数。匹配确定n的次数。 例如't{2}'不能匹配'dot'中的t,但是能匹配'dotted'中的俩个t // {n,} n是一个非负整数。至少匹配n次,例如't{2,}'不能匹配'dot'中的t,但是能匹配'dotttttt'中的所有t // {n,m} n和m都是非负整数,其中n<=m。 最少匹配n次且最多匹配m次。例如't{1,3}'将匹配'dotttttt'中的前三个t // \b 匹配一个单词边界,也就是指单词和空格键的位置 // \B 匹配非单词边界。 var reg = /^[0-9]{5}t{1,3}do(es)*a$/ var text = '32134tttdoesa' console.log(reg.test(text)) var reg1 = /^[1-9][0-9]{1}$/ console.log(reg1.test('22')) var reg2 = /<.*?>/ let b = '<h1>dsasda</h1>' console.log(b.match(reg2)) // 正则过滤a,b,c var text3 = 'pjkmjknjlabcn' var reg3 = '/[a,b,c]/g' console.log(text3.replace(/[a,b,c]/g, '')); // 所有的正整数 var reg3 = /^[1-9][0-9]{0,}/ var num = 98 console.log(reg3.test(num)) // 所有的正整数 var reg4 = /^[1-9]0$/ var num1 = 10 console.log(reg4.test(num1)) var url = 'http://baidu.com:8080?user=name&pwd=password' var reg4 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ console.log(url.match(reg4)) function regNum(x=0) { return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') } console.log(regNum(23456)) var reg8 = /^18|19$/ // 以18开头或者以19结尾 // 以1开头,以9结尾,中间是8或者1 // 以18开头或者19结尾即可 =》'你好18' '18你好' console.log(reg8.test('18')) console.log(reg8.test('19')) console.log(reg8.test('1819')) console.log(reg8.test('181')) console.log(reg8.test('819')) console.log(reg8.test('181')) console.log(reg8.test('你好18')) // false console.log(reg8.test('你好19')) // true console.log(reg8.test('18你好')) var reg9 = /^(18|19)$/ // 只有18或者19符合 console.log(reg9.test('18')) console.log(reg9.test('19')) console.log(reg9.test('1819')) // false // 中括号出现的元字符,一般都代表本身的含义 var regs = /^[.?+&]/; console.log(regs.test('18')) //false console.log(regs.test('.d')) //true console.log(regs.test('+d')) //true console.log(regs.test('?')) //true // 以数字、字母、下划线、-,并且不能以-开头 var regt = /^\w[\w-]*$/ console.log(regt.test('9-2')) //true console.log(regt.test('-2')) //false // 验证18-65之间的年龄 // var regy = /^[18-65]$/ =>1或者8-6或者5中的任意一个字符,中括号中出现的18不是数字,而是1或者8,当前正则是非法的,不能设置这种范围 // 分三个阶段 // 1、18或者19 // 2、 20-50 // 3、60-65 // var regage = /^((18|19)|([2-5]\d)|(6[0-5]))$/ var regage = /^((18|19)|([2-5]\d)|(6[0-5]))$/ console.log(regage.test(23)) </script> </html>