<!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>