1.正则表达式创建方式
console.log(/a/.test(str))
let reg = new RegExp('h','g')
console.log(reg.test(str))
2.使用对象的方式创建正则表达式
let con = prompt("请输入需要搜索的内容")
let reg = new RegExp(con,'g')
let div = document.querySelector("div")
div.innerHTML = div.innerHTML.replace(reg,search =>{
return `<span style="color:red">${search}</span>`
})
3.选择符的使用 |
let str = 'hello world'
console.log(/a|u/.test(str))
let tel = '010-99999999'
console.log(/^(010|020)\-\d{7,8}$/.test(tel))
4.原子表与原子组的选择符 [] ()
5.转义 \
let price = 23.45
console.log(/\d+\.\d+/.test(price))
let reg = new RegExp('\\d+\\.\\d+')
console.log(reg.test(price))
6.字符边界约束 ^ $
let n = 'baidu2222222baidu'
console.log(/\d/.test(n))
console.log(/^\d$/.test(n))
console.log(/^\d/.test(n))
console.log(/\d$/.test(n))
document.querySelector("[name='user']").addEventListener("keyup",function(){
let flag = this.value.match(/^[a-z]{3,6}/)
document.querySelector("span").innerHTML = flag?"正确":"失败";
})
7.数值与空白元字符 \d \s
let str = 'hello world 2021'
console.log(str.match(/\d+/g))
let str2 = `
张三:010-11111111,
李四:020-22222222
`
console.log(str2.match(/\d{3}-\d{7,8}/g))
console.log(str2.match(/[^:-\d,]/g))
console.log(str2.match(/[^:-\d,\s]/g))
console.log(str2.match(/[^:-\d\s,]+/g))
8.w 字符和 \w 元字符
let str = 'helloworld2021'
console.log(str.match(/\w+/))
let email = '123@123.com'
console.log(email.match(/^\w+@\w+\.\w+$/))
let username = prompt("请输入用户名")
console.log(/^[a-zA-Z]\w{4,9}$/.test(username))
-
. 元字符
let str = 'hello world'
console.log(str.match(/.+/))
let url = 'https://www.baidu.com'
console.log(url.match(/(https:\/\/)?\w+\.\w+.\w+/))
let str2 =`
baidu.com
jd.com
`
console.log(str2.match(/.+/s)[0])
let tel = '010 - 99999999'
console.log(tel.match(/\d{3} - \d{7,8}/))
console.log(tel.match(/\d{3}\s-\s\d{7,8}/))
-
匹配所有字符 \s\S \d\D
let str = `
<span>
1231
avasdas
3##!%^&*
SAGYSUID
DSFHAUISDAsdhafuisp
上帝就发iOS的哈
</span>
`
let str2 = 'ab33333333^^'
console.log(str2.match(/[ab1234567890^@#$%&*]+/))
console.log(str.match(/<span>[\s\S]+<\/span>/))
11.模式修正符
let hd = "houdunren"
console.log(hd.match(/u/gi))
console.log(hd.replace(/u/gi,'@'))
12.多行匹配修正符
let str = `
#1 js,200元 #
#2 php,300元 #
#3 java,400元 #
#4 node.js,200元 #
`
let lessons = str.match(/^\s*#\d+\s*.+\s*#$/gm).map(v =>{
v = v.replace(/\s*#\d+\s*/,'').replace(/\s*#/,'')
let arr = v.split(',')
return {name:arr[0],price:arr[1]}
})
console.log(lessons)
console.log(JSON.stringify(lessons))
13.汉字与字符属性
let hd = 'houdunren.不断发布教程'
console.log(hd.match(/\p{L}/gu))
console.log(hd.match(/\p{P}/gu))
console.log(hd.match(/\p{sc=Han}/gu))
let str = '中文就是宽体字'
console.log(str.match(/\p{sc=Han}/u))
-
lastIndex 属性
let hd = "houdunren"
let reg = /\w/g
console.log(reg.lastIndex)
console.log(reg.exec(hd))
console.log(reg.lastIndex)
console.log(reg.exec(hd))
while((res = reg.exec(hd))){
console.log(reg.lastIndex)
console.log(res)
}
15.有效的 y 模式
let hd = "说的话四大行撒大苏打:11111111,22222222,33333333谁都不爱手段是丢啊是大束带苏丹哈桑www.baidu.com"
let arr = []
console.log(hd.match(/\d+,?/g))
let reg = /\d+,?/y
reg.lastIndex = 11
while((res = reg.exec(hd))){
arr.push(res[0])
}
console.log(arr)
16.原子表的使用
let hd = "houdunren"
console.log(hd.match(/[ue]/g))
let date = "2020-02-11"
let reg = /^\d{4}[-/]\d{2}[-/]\d{2}/
let reg = /^\d{4}([-/])\d{2}\1\d{2}/
console.log(date.match(reg))
17.原子表区间匹配
<input type="text" name="username">
<script>
let num = '2010'
console.log(num.match(/[0-9]+/g))
let hd = "houdunren"
console.log(hd.match(/[a-z]+/g))
let input = document.querySelector('[name="username"]')
input.addEventListener("keyup",function(){
console.log(this.value.match(/^[a-z]\w{3,6}$/i))
})
</script>
18.排除匹配
let hd = 'houdunren.com'
console.log(hd.match(/[^ue]/gi))
let str = '张三:010-11111111,李四:020-22222222'
console.log(str.match(/[^:-\d,]+/g))
console.log(str.match(/\p{sc=Han}+/gu))
19.原子表字符不解析
let hd = '(houdunren).+'
console.log(hd.match(/[.+]/gi))
console.log(hd.match(/[()]/g))
20.原子表匹配所有内容
let hd = `
houdunren
hdcms
`
consol.log(hd.match(/.+/gs))
console.log(hd.amtch(/[\s\S]+/)[0])
21.正则表达式操作DOM 元素
<body>
<h1>后盾人教育</h1>
<div> this is houdunren.com</div>
</body>
<script>
let body = document.body
let reg = /<(h[1-6])>[\s\S]*<\/\1>/gi
body.innerHTML = body.innerHTML.replace(reg,'')
</script>
22.认识原子组
let str = `
<h1>string1</h1>
<h1>string2</h1>
`
let reg = /<(h[1-6])>[\s\S]*<\/\1>/i
console.log(str.match(reg))
23.邮箱认证原子组的使用
<body>
<input type="email" name="userEmail">
<span></spanspan>
</body>
<script>
let email = document.querySelector(`[name="userEmail"]`)
emial.addEventListener("keyup",function(){
let reg = /^[\w-]+@([\w-]+\.){1,2}(com|cn|org|cc|net)$/i
document.querySelector("span").innerText = reg.test(this.value)?'正确':'失败'
})
</script>
24.原子组引用完成替换操作
let hd = `
<h1>houdunren</h1>
<span>后盾人</span>
<h2>hdcms</h2>
`
let reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi
console.log(hd.replace(reg,`<p>$2</p>`))
let res = hd.replace(reg,(p0,p1,p2)=>{
console.log(p0)
console.log(p1)
console.log(p2)
})
25.嵌套分组与不记录分组
let hd = `
https://www.houdunren.com
http://www.baidu.com
https://hdcms.com
`
let reg = /^https?:\/\/(\w+\.)?\w+\.(com|cn|org)$/gi
console.dir(hd.match(reg))
let reg2 = /^https?:\/\/((?:\w+\.)?\w+\.(?:com|cn|org))$/gi
console.dir(hd.match(reg2))
let urls = []
while((res = reg2.exec(hd))){
urls.push(res[1])
}
console.log(urls)
26.多种重复匹配的基本使用
let hd = "hdddddd"
console.log(hd.match(/hd+/))
console.log(hd.match(/hd?/))
console.log(hd.match(/hd*/))
console.log(hd.match(/hd{1,4}/))
27.重复匹配对原子组的影响与电话号正则
let hd = "hdhdhdhddddddddddddddddddddddddhd"
console.log(hd.match(/hd+/g))
console.log(hd.match(/(hd)+/g))
let tel = `010-99999999`
console.log(tel.match(/^o\d{2,3}-\d{8,9}$/))
28.网站用户名验证
<body>
<input type="text" name="username">
</body>
<script>
document.querySelector(`[name="username"]`).addEventListener("keyup",function(e){
let res = e.target.value
let reg = /^[a-zA-Z][\w-]{2,7}$/
console.log(reg.test(res))
})
</script>
29.批量使用正则完成密码验证
<body>
<input type="text" name="password">
</body>
<script>
document.querySelector(`[name="password"]`)
.addEventListener("keyup", e=>{
let value = e.target.value
const reg = [
/^[a-z0-9]{5,10}$/i,
/[A-Z]/,
/[0-9]/
]
let state = reg.every(e =>{
return e.test(value)
})
console.log(state)
})
</script>
30.禁止贪婪
let hd = `hddddd`
console.log(hd.match(/hd+?/))
console.log(hd.match(/hd{2,}?/))
31.标签替换的禁止贪婪使用
<main>
<span>123123123</span>
<span>123123123</span>
<span>123123123</span>
</main>
<script>
const main = document.querySelector('main')
const reg = /<span>([\s\S]+?)<\/span>/gi
main.innerHTML = main.innerHTML.replace(reg,(v,p1)=>{
return `<h4 style="color:red;">后盾人-${p1}</h4>`
})
</script>
32.使用matchAll完成全局匹配
<body>
<h1>12312312A</h1>
<h1>12312312B</h1>
<h1>12312312C</h1>
</body>
<script>
let reg = /<(h[1-6])>([\s\S]+?)<\/\1>/gi
const body = document.body
const hd = body.innerHTML.matchAll(reg)
let arr = []
for(const iterator of hd){
console.log(iterator)
arr.push(iterator[2])
}
console.log(arr)
</script>
33.使用exec完成全局匹配
<body>
<h1>123123</h1>
<h1>123123</h1>
<h1>123123</h1>
</body>
<script>
let hd = "houdunren"
let reg = /u/gi
let result = []
while((res = reg.exec(hd))){
result.push(res)
}
console.log(result)
function search(String,reg){
let result = []
while((res = reg.exec(String))){
result.push(res)
}
return result
}
let matchs = search(document.body.innerHTML,/<(h[1-6])>([\s\S+?])<\/\1>/gi)
console.log(matchs)
</script>
34.字符串正则方法search与match
let hd = "houdunren.com"
console.log(hd.search(/u/g))
let str = `
https://www.baidu.com
http://www.jd.com
https://www.sinna.com.cn
`
let reg = /^https?:\/\/(www\.)?(\w+\.){1,2}(com|cn)$/gi
console.log(str.match(reg))
35.字符串正则方法 matchAll 和 split
let hd = `
https://www.baidu.com
http://www.jd.com
https://www.sinna.com.cn
`
let reg = /^https?"\/\/(www\.)?(\w+\.)+(com|cn)$/gi
for(const iterator of hd.matchAll(reg)){
console.log(iterator)
}
let time1 = '2020/09/01'
let time2 = '2020-09-12'
console.log(time1.split(/[-\/]/))
console.log(time2.split(/[-\/]/))
36.$符号在正则替换中的使用
let tel = '2020/1/11'
console.log(tel.replace(/\//g,'-'))
let hd = `
(010) 99999999
(0201) 88888888
`
let reg = /\((\d{3,4})\)\s(\d{8,9})/g
console.log(hd.match(reg))
console.log(hd.replace(reg),"$1-$2")
37.$& 的使用
<main>
在线教育是一种高效的学习方式,教育是一生的事业
</main>
<script>
const main = document.querySelector("body main")
main.innerHTML = main.innerHTML.replace(/教育/g,
`<a href="https://www.baidu.com">$&</a>`
)
</script>
38。原子组在替换中的使用技巧
<main>
<a style="color:red" href="http://www.hdcms.com">开源系统</a>
<a href="http://houdunren.com">后盾人</a>
<a href="http://yahoo.com">雅虎</a>
<h4>http://www.hdcms.com</h4>
</main>
<script>
const main = document.querySelector("body main")
let reg = /(<a>.*href=['"])(http)(:\/\/)(www\.)?(hdcms|houdunre)(\.)(com|cn)/gi
main.innerHTML = main.innerHTML.replace(reg,(v,...args)=>{
console.log(v)
console.log(..args)
args[1] += 's'
args[3] = args[3] || 'www.'
return args.splice(0,5).join("")
})
</script>
39.原子组别名
let hd = `
<h1>houdunren</h1>
<span>后盾人</span>
<h2>hdcms</h2>
`
const reg = /<(h[1-6])>(.*?)<\/\1>/gi
console.log(hd.replace(reg,`<h4>$2</h4>`))
const reg2 = /<(h[1-6])>(?<con>.*?)<\/\1>/gi
console.log(hd.replace(reg2,`<h4>$<con></h4>`))
40.使用原子组别名优化正则
<main>
<a id="a" href="https://www.baidu1.com">后盾人</a>
<a id="a" href="https://www.baidu2.com">后盾人</a>
<a id="a" href="https://www.baidu3.com">后盾人</a>
</main>
<script>
const main = document.querySelector("main")
const reg = /<a.*?href=(['"])(?<link>.*?)\1>(?<title>.*?)<\/a>/gi
const links=[]
for(const iterator of main.innerHTML.matchAll(reg)){
link.push(iterator['groups'])
}
console.log(links)
</script>
41.正则方法test
const emial = document.querySelector(`[name="email"]`)
email.addEventListener("keyup",function(e){
let value = e.target.value
let reg = /^[\w-]+@([\w]+\.)+(com|cn|cc)$/i
let flag = reg.test(value)
console.log(flag)
})
42.正则方法 exec
<main>
构造函数 原型离不开构造函数
构造函数 原型离不开构造函数
</main>
<script>
let reg = /构造函数/g
const main = document.querySelector("body main")
let count = 0;
while((res = reg.exec(main.innerHTML))){
count++
}
console.log(count)
</script>
43.断言匹配
<main>
后盾人不断分享视频教程,学习后盾人教程提升编程能力
</main>
<script>
let main = document.querySelector("body main")
let regOld = /后盾人/g
let reg = /后盾人(?=教程)/g
main.innerHTML = main.innerHTML.replace(reg,`
<a href="https://houdunren.com">$&</a>
`)
</script>
44.使用断言匹配规范价格
let lessons = `
js,200元,300次
php,300.00元,100次
node.js,180元,260次
`
let reg = /(\d+)(.00)?(?=元)/gi
lessons = lessons.replace(reg,(v,...args)=>{
args[1] = args[1] || '.00'
return args.slice(0,2).join("")
})
console.log(lessons)
45.断言匹配2
<body>
<main>
<a href="https://baidu.com">百度</a>
<a href="https://yahoo.com">雅虎</a>
</main>
<script>
const main = document.querySelector("main")
const reg = /(?<=href=["']).+(?=["'])/gi
main.innerHTML = main.innerHTML.replace(reg,'https://www.houdunren.com')
let hd = "houdunren789hdcms666"
const reg2 = /(?<=houdunren)\d+/i
console.log(reg2.test(hd))
</script>
</body>
46.使用断言匹配模糊电话号码
let users = `
亚索: 18117098030
后盾人: 18717191629
`
let reg = /(?<=\d{7})\d{4}/gi
users = users.replace(reg,v=>{
return "*".replace(4)
})
console.log(users)
47.断言匹配
let hd = "houdunren2010hdcms"
let reg = /[a-z]+(?!\d+)$/i
console.log(hd.match(reg))
48.断言匹配限制用户名关键词
<main>
<input type="text" name="username">
</main>
<script>
const input = document.querySelector(`[name="username"]`)
input.addEventListener("keyup",function(){
const reg = /^(?!.*[\.\-?].*)[\s\S]{5,10}$/
console.log(this.value.match(reg))
})
</script>
49.断言匹配
let hd = 'hdcms123123houdunren'
let reg = /(?<!\d+)[a-z]+/i
console.log(hd.match(reg))
50.使用断言排除法统一数据
<main>
<a href="https://www.houdunren.com/1.jpg">1.jpg</a>
<a href="https://oss.houdunren.com/1.jpg">2.jpg</a>
<a href="https://cdn.houdunren.com/1.jpg">3.jpg</a>
<a href="https://houdunren.com/1.jpg">4.jpg</a>
</main>
<script>
const main = document.querySelector("main")
const reg = /https:\/\/([a-z]+)?(?<!oss)\..+?(?=\/)/gi
main.innerHTML = main.innerHTML.replace(reg,v=>{
return "https://oss.houdunren.com"
})
</script>