三、javascript正则表达式


一、Javascript正则表达式

1.1 y模式

// g g会一直匹配下去,遇到不是的跳过继续往下匹配
// y y遇到匹配不上的就不会再匹配下去了

let str = 'kakangyun'
let reg = /k/g
console.log(reg.exec(str))
console.log(reg.lastIndex)
// y往下一个匹配是a不是k匹配不上,就不再继续匹配了
// y在匹配大文档的时候会节省资源
console.log(reg.exec(str))
console.log(reg.lastIndex)

1.2 原子表的基本使用

// [] 原子表
// () 原子组

let time = '2022-02-23'
let reg = /^\d{4}([-\/])\d{2}\1\d{2}$/
console.log(reg.exec(time))

1.3 区间匹配

+ : 一次以上
* : 0次以上
? : 0或1次

. : 除换行之外的所有字符
match 匹配到的就存进数组中,再继续匹配,区配到的又存进数组中

// [0-9] [a-z] 

1.4 认识原子组

// 原子组()可以在正则中引用原子组\1\2\3
let html = `
    <h1>kangyun</h1>
    <h2>永恒的宁静</h2>
`
let reg = /\s*<(h[1-6])>([\s\S]*)<\/\1>/i
console.log(html.match(reg))
console.log(reg.exec(html))

邮箱正则匹配:

let mail = "17902@qq.com.cn"
let reg = /^[\w-]+@([\w-]+\.)+(com|org|cc|cn|net)$/i
console.log(reg.test(mail))

另一个demo:

let str = `
    <h1>hello,world!</h1>
    <span>你好呀!</span>
    <h2>hehe!</h2>
    `
// 将str中的h标签替换成p标签
let reg = /<(h[1-6])>([\s\S]+)<\/\1>/gi
// $2是第二个原子组匹配到的内容
// console.log(str.replace(reg, `<p>$2</p>`))

let res = str.replace(reg,(p0,p1,p2)=>{
    // console.log(p0) p0正则匹配到的内容
    // console.log(p1) 第一个分组匹配到的内容
    // console.log(p2) 第二个分组匹配到的内容
    return `<p>${p2}<p>`
})
console.log(res)

1.5 嵌套分组与不记录分组

// ?: 这个分组不记录
// 将字符串中的域名提取出来
let urls = `
    https://www.tianyun.com
    http://tianyun.com
    http://ty.com
`

let reg  = /https?:\/\/((?:w+\.)?\w+\.(?:com|cn|net|org))/gi

// match返回匹配的字符串
// exec会返回每个分组匹配的字符串

let urlArr = []
while((res = reg.exec(urls))){
    urlArr.push(res[1])
}
console.log(urlArr)

1.6 批量使用正则表达式完成密码验证

const password = 'abcd';
const regs = [
    /^[a-z0-9]{5,10}$/i,
    /[A-z]/,
    /[0-9]/
]

let state = regs.every(e=>{
    console.log(e)
    e.test(password)
});
console.log(state)

1.7 禁止使用贪婪

// ?前面是表过个数的时候表示禁用贪婪模式
let str = "kyyyyyy";
// + 匹配>=1
console.log(str.match(/ky+/))  //kyyyyyy
// +后面那个问题就是禁止贪婪,+就取=1
console.log(str.match(/ky+?/)) //ky
console.log(str.match(/ky*?/)) //k
// 往少的贪加上?
console.log(str.match(/ky{2,100}?/)) //kyy
// ?? ? 0或1个,加上问号就是往小的贪0
console.log(str.match(/ky??/)) //k
// 将字符串中span标签替换成h4标签
let str = `
    <span>kangyun</span>
    <span>kangyun.com</span>
    <span>tianyun.org</span>
`
// 使用了禁止贪婪
const reg = /<span>([\s\S]+?)<\/span>/gi
var res = str.replace(reg, (v,p1)=>{
    return `<h4 style="color:red">${p1}</h4> `;
})
console.log(res)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永恒的宁静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值