簡體   English   中英

JavaScript 正則表達式:我想替換變量的最后 4 個單詞

[英]JavaScript Regular Expression : I want to replace last 4 words of my variables

我目前正在使用 Spring、Java 和 Javascript 制作電子商務網站。 我想在用戶注冊問題時隱藏用戶的最后四個單詞,例如

你好123 >> 地獄**** stackoverflow >> stackover****

這是我在 jsp 中編寫的代碼。

<table>
<td id="userId">${ qna.userId }</td>
</table>

<script>
var userId = document.getElementById("userId");
    
    function maskingNumbers(userId) {
           return userId.replace(/\d(?=\d{4})/g, "*");
         }
</script>

好吧,我的“userId”仍然以原始形式打印出來。 如果您具體說明這些步驟,將非常感謝。

您要求替換“單詞”,因為您的示例似乎顯示了“字符”替換,這更容易。 正如@JohannesH 指出的那樣,您的正則表達式似乎以數字為目標。

試試這個表達

userId.replace(/\w{4}$/g, "****")

正則表達式\w{4}$以輸入中的最后四個單詞字符(表示數字或字母或_ )為目標

稍加思考后編輯

如果最后 4 個字符中有任何空格或符號,我給你的答案將失敗。 你寧願只使用. , 代表任何字符

userId.replace(/.{4}$/g, "****")

而且您必須處理輸入開頭少於 4 個字符的情況...

在這里試試: https://regex101.com/r/HyXUp1/2

更多思考后更多編輯

您的問題表面上看起來很簡單,但在嘗試徹底回答時要求更多。 感謝其他用戶的評論。 對於以下問題,我猶豫着給出第二個答案:

正如我所指出的,您還應該考慮輸入中有 4 個或更少字符的情況。 你最終可能會得到非常復雜的代碼......或者使用下面的解決方案(稍后解釋)

function maskInput(input) {
    return input.replace(/(.?)(.{1,4})$/g, '$1****').substr(0, input.length);
}

正則表達式(.?)(.{1,4})$將在末尾匹配最多 4 個字符,前面有 1 個其他字符(可選)。 並且這個前面的字符將被捕獲在第 1 組(第一組括號)中。 在這里測試https://regex101.com/r/HyXUp1/3

替換將吐出第一個捕獲的組( $1 ),然后用 4 顆星代替所有匹配的字符(保持開頭不變)。 但是,如果字符串短於 5 個字符,這將導致結果過長。

因此,我們使用String.substr方法使用原始字符串的長度在結果變得太長之前將其剪掉

 const inputs = [ 'Find the last 4 chars in this sentence', 'Stackoverflow', 'I\'ma smart monk3y', 'I\'ma dumb m0nk@y', '6chars', '5chrs', '4crs', '3cr', '2c', '1', ]; function maskInput(input) { return input.replace(/(.?)(.{1,4})$/g, '$1****').substr(0, input.length); } inputs.forEach(input => console.log(input, '->', maskInput(input)));

使用 string.replace() 方法和正則表達式,您可以更改輸入字符串的最后 4 個字符。

正則表達式看起來像這樣:

/.{4}$/g

額外的想法:當輸入短語的長度小於或正好四個字符時,您必須決定要做什么。 如果你像下面的代碼片段那樣做,少於四個字符的字符串將不會被更改。

 let userID = "stackoverflow"; console.log("input: " + userID); function maskingNumbers(e) { return e.replace(/.{4}$/g, "****"); } console.log("result: " + maskingNumbers(userID));

單擊此處獲取 JS 小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM