Если ваша строка состоит только из цифр , вам действительно не нужно регулярное выражение, все, что вам нужно, это пара методов манипуляции со строками:
// 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
).