我刚刚发现,在旧的浏览器中,积极的向后看不起作用,我在IE11上遇到了这个问题,即意外的量词
正则表达式:
/(?<=d{4})d(?=d{4})/g
输入:
const string = 4444333322221111;
string.replace(/(?<=d{4})d(?=d{4})/g, "#");
预期结果:
4444########1111
此正则表达式的任何替代方案都会有所帮助。
如果您的字符串只由数字组成您真的不需要正则表达式,您只需要两种字符串操作方法:
// Adapted from https://stackoverflow.com/a/5450113/3832970, count will always be positive here
function strRepeat(pattern, count) {
var result = '';
while (count > 1) {
if (count & 1) result += pattern;
count >>= 1, pattern += pattern;
}
return result + pattern;
};
var string = "4444333322221111";
console.log(
string.substring(0,4) + strRepeat("#", string.length-8) + string.slice(-4)
)
如果您需要在较长的字符串中屏蔽两边各有四位数字的数字,您可以使用:
function strRepeat(pattern, count) {
var result = '';
while (count > 1) {
if (count & 1) result += pattern;
count >>= 1, pattern += pattern;
}
return result + pattern;
};
var string = "111109876543210000 abc 1234012345678904321";
console.log(
string.replace(/d{9,}/g, function(match) {
return match.substr(0,4) + strRepeat("#", match.length-8) + match.slice(-4);
})
)
这里,
/d{9,}/g
匹配所有出现的九位或九位以上数字function(match) {...}
-一个回调方法,它接受正则表达式匹配,您可以在此处操作输出match.substr(0,4) + "#".repeat(match.length-8) + match.slice(-4)
-插入前4位数字,然后追加需要用#
替换的数字,然后添加剩余的4位数字
如果你愿意,你可以用捕获组来制作正则表达式模式,它会使回调方法变小,但会使正则表达式变长:
function strRepeat(pattern, count) {
var result = '';
while (count > 1) {
if (count & 1) result += pattern;
count >>= 1, pattern += pattern;
}
return result + pattern;
};
var string = "111109876543210000 abc 1234012345678904321";
console.log(
string.replace(/(d{4})(d+)(d{4})/g, function($0, $1, $2, $3) {
return $1 + strRepeat("#", $2.length-8) + $3;
})
)
这里,(d{4})(d+)(d{4})
模式将把4个数字捕获到组1($1
(中,然后把1+个数字捕获在组2($2
(中,并且然后把4个数据捕获到组3($3
(中。
您的输入字符串看起来像一个支付卡号。您不需要regex,可以使用简单的字符串处理函数,如String.substring()
和字符串串联。
例如:
const str = '1111222233334444';
const masked = str.substring(0, 4) +
'#'.repeat(str.length - 8) +
str.substring(str.length - 4)
console.log(masked);
正则表达式解决方案不需要使用查找:
const str = '1111222233334444';
const masked = str.replace(/^(d{4})(d*)(d{4})$/,
`$1${"#".repeat(str.length - 8)}$3`);
console.log(masked);
您可以获取一个函数和索引,并将前四位替换为digit或#
。
var string = '4444333322221111';
console.log(string.replace(/d(?=d{4})/g, function (v, i) { return i < 4 ? v : '#'; }));
使用切片字符串更新。
var string = '4444333322221111',
result =
string.slice(0, 4) +
string.slice(4, -4).replace(/./g, '#') +
string.slice(-4);
console.log(result)