正则表达式-前瞻运算符

154 阅读1分钟

正则表达式的运用可以说非常广泛,前面也有简单介绍过正则表达式的基础,这里介绍一下前瞻运算符的一个使用,也能让我们在正则表达式的使用中,更加得心应手

下面就简单是一个 number(bigint).toLocaleString() 方法的添加 , 分隔符的操作吧

const num = 1000000
console.log(num.toLocaleString()) //  1,000,000

const num1 = 100000000000000n
console.log(num1.toLocaleString()) //  100,000,000,000,000

我们使用正则表达式前瞻运算符实现这个效果吧(要是使用平时的循环更加难受了),直接转化字符串(用来模拟不适用bigint的长数字字符场景)

错误示范

const s = '100000000'
//假设我们直接使用默认正则匹配,会发现,都变成了逗号
const res = s.replace(/\d{3}/g ',') // 打印,,,

引入前瞻运算符((?=规则)),解决替换匹配中的插入操作

加入前瞻运算符,直接从尾部替换 \d{3}$,发现只替换一组

const s = '100000000'
直接加上前瞻运算符
const localStr = s.replace(/(?=\d{3}$)/g, ","); //打印 100000,000

加上 + 表示多组,发现边界也出现了出现了,

const s = '100000000'
//因为会有多组,因此要更新一下 \d{3} 变成 (\d{3})+
const localStr = s.replace(/(?=(\d{3})+$)/g, ","); //,100,000,000

使用不匹配边界运算符 \B( \b是匹配边界,需要区分好)

const s = '100000000'
//因为会有多组,因此要更新一下 \d{3} 变成 (\d{3})+
const localStr = s.replace(/\B(?=(\d{3})+$)/g, ","); //100,000,000

这样就完成了类似的效果了