帮忙写一个正则?

一个长度不固定的字符串, 保留首尾各3个字符, 其余部分内容用 "" 号代替, 并且 "" 号的数量和去除首尾个3个字符后的内容长度一样 ,这么一个需求.

比如 let str = "123456789" 变成 123*789

需求好实现, 主要想问问, 用一句正则能不能实现?

如果长度固定

str.replace(/(.{3}).{3}(.{3})/, "$1***$2")

倒是能实现, 主要是长度不固定怎么实现

阅读 1.8k
4 个回答
'1234564526789'.replace(/(?<=\d{3})\d(?=\d{3})/g, '*')
'1234564526789'.replace(/(?<=.{3}).(?=.{3})/g, '*')

clipboard.png

replace接受函数作为参数,如果匹配正则那么函数的第一个参数对应$1,第二个对应$2,以此类推...replace 使用function作为参数

let str = "123453333336789"
str.replace(/(.{3}).*(.{3})/, function(match,p1,p2){return p1+"*".repeat(str.length-6)+p2})
//"123*********789"
function filterFunc(str,char){
    var transStr=str.substring(3,str.length-3);
    return str.substring(0,3)+transStr.replace(/\w/g,char)+str.substring(str.length-3,str.length);
}
console.log(filterFunc(Str,'*'));

既然都知道$1是第一个匹配了,就没有必要用函数了

let str = "123453333336789"
str.replace(/(^.{3})(.*)(.{3}$)/, "$1*$3")
//"123*789"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题