鍍金池/ 問答/HTML/ 幫忙寫一個正則?

幫忙寫一個正則?

一個長度不固定的字符串, 保留首尾各3個字符, 其余部分內(nèi)容用 "" 號代替, 并且 "" 號的數(shù)量和去除首尾個3個字符后的內(nèi)容長度一樣 ,這么一個需求.

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

需求好實現(xiàn), 主要想問問, 用一句正則能不能實現(xiàn)?

如果長度固定

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

倒是能實現(xiàn), 主要是長度不固定怎么實現(xiàn)

回答
編輯回答
墨染殤

replace接受函數(shù)作為參數(shù),如果匹配正則那么函數(shù)的第一個參數(shù)對應(yīng)$1,第二個對應(yīng)$2,以此類推...replace 使用function作為參數(shù)

let str = "123453333336789"
str.replace(/(.{3}).*(.{3})/, function(match,p1,p2){return p1+"*".repeat(str.length-6)+p2})
//"123*********789"
2017年10月4日 21:49
編輯回答
枕頭人

既然都知道$1是第一個匹配了,就沒有必要用函數(shù)了

let str = "123453333336789"
str.replace(/(^.{3})(.*)(.{3}$)/, "$1*$3")
//"123*789"
2017年7月3日 10:24
編輯回答
背叛者
'1234564526789'.replace(/(?<=\d{3})\d(?=\d{3})/g, '*')
'1234564526789'.replace(/(?<=.{3}).(?=.{3})/g, '*')

clipboard.png

2017年6月11日 23:36
編輯回答
拽很帥
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,'*'));
2018年6月30日 06:47