在我的应用程序中,我有一个字母数字字符串被传递到我的函数中。该字符串通常为 17 个字符,但并非总是如此。我正在尝试编写一个正则表达式来匹配字符串中除最后 4 个字符之外的所有字符,并将它们替换为 X (以屏蔽它)。
例如
Input: HGHG8686HGHG8686H
Output: XXXXXXXXXXXXX686H
Run Code Online (Sandbox Code Playgroud)
我编写的用于对字符串执行替换的正则表达式如下
[a-zA-Z0-9].{12}
Run Code Online (Sandbox Code Playgroud)
代码:
const maskedString = string.replace(/[a-zA-Z0-9].{12}/g, 'X');
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,它将字符串中除最后 4 个字符之外的所有字符替换为单个 X。它不知道对每个匹配的字符都执行此操作。有任何想法吗?
小智 1
向前看 ( ?=)确保至少有四个以下字符。
const regex = /.(?=....)/g;
// ^ MATCH ANYTHING
// ^^^^^^^^ THAT IS FOLLOWED BY FOUR CHARS
function fix(str) { return str.replace(regex, 'X'); }
const test = "HGHG8686HGHG8686H";
// CODE BELOW IS MERELY FOR DEMO PURPOSES
const input = document.getElementById("input");
const output = document.getElementById("output");
function populate() { output.textContent = fix(input.value); }
input.addEventListener("input", populate);
input.value = test;
populate();Run Code Online (Sandbox Code Playgroud)
<p><label>Input: </label><input id="input"></p>
<p>Output: <span id="output"></span></p>Run Code Online (Sandbox Code Playgroud)
非正则表达式解决方案:
const test = "HGHG8686HGHG8686H";
function fix(str) {
return 'X'.repeat(str.length - 4) + str.slice(-4);
}
console.log(fix(test));Run Code Online (Sandbox Code Playgroud)
String#repeat你在 IE 中找不到。
| 归档时间: |
|
| 查看次数: |
3567 次 |
| 最近记录: |