banner
SlhwSR

SlhwSR

热爱技术的一名全栈开发者
github
bilibili

彻底玩6正则(1)

1. 为什么用正则?#

小例子#

假设有一段字符串
const result="124ssabc33501fs"
现在我只想取里面的数字。如何去做?

当然你肯定会想到这样:

let r1=[...result].filter((item,index)=>!Number.isNAN(item)).join("") 

虽然只有一行,但是,还没到最优雅。

如果使用正则

console.log(result.match("/\d/g").join())

即可匹配到所有数字。

创建正则的方式#

字面量创建#

let oo="lhw"
console.log(/w/.test(oo)) //检测是否有w字符

但?如果我的 w 是个变量呢?

let oo="lhw"
const h="h"
console.log(eval(`/${h}/`.test(oo)))

对象创建#

let oo="luhw"
let a="h"
let a2="\\w" //匹配下划线
let a3="\\d" //匹配数字
let reg=new RegExp("u","g") //匹配字串、全局
let reg2=new RegExp(a,"g") //接收变量比字面量方便
reg.test(oo)

小例子#

案例,当用户输入文字时将 div 里对应的文字替换。

<div class="content">lhwwoc</div>
<script>
  let content=prompt("请输入内容")
  let reg=new RegExp(content,"g")
  const element=doucument.qureySelector(".content")
 // let str=content.replace(/\w/,str=>{})
 element.innerHtml.replace(reg,str=>{
   return `<span style="color:red">
             ${str}
         </span>`
 })
</script>

选择符#

类似于逻辑||

const str="newnewnwec"
console.log(/@|n/.test()) //true
console.log(/@|o/.test()) //false
console.log(/wne|n/.test()) //true

伏笔#

假设我要检测一个电话号是北京或者是不是上海

/(010|020)\-\d{7,8}}/.test("010-12309721") //true

/(010|020)\-\d{7,8}}/.test("assd010-12309721") //false

我们发现开头结尾并没有限制。

接下来会说。

先解释原子表的概念

let reg=/[123456]/
let age="18"
reg.test("1") //true
age.match(reg)  //返回[1] //仅匹配一个。

如果将【 】换成 ()
//

let reg=/(18|34|56)/
let age="18"
reg.test("1") //false
age.match(reg)  //返回["18","18",index:0]
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。