选择第n个数字和第n个数字Regex之间的字符串中的所有字符

时间:2016-06-08 15:22:03

标签: javascript jquery regex string mask

我试图在jQuery函数中使用正则表达式来选择和屏蔽字符串中除'前4个和后4个字符外的'x'的所有字符。字符串可以是任何长度。我可以分别成功地掩盖最后4位数字和前4位数字,但我并不能真正理解正则表达式,以便将字符串中的第n个字符选择为第n个字符并屏蔽它们。如果有人可以提供帮助,那将非常感激 - 我花了很多时间在论坛上搜寻并试图编写我自己的正则表达但无济于事。

由于

我目前的功能如下:

<input type="text" class="read-only-mask" title="" value="1233434343434456789012" name="" id=""readonly />
<script>
$(document).ready(function() {
    $('.read-only-mask').val(function(_,val) {
         return val.replace(/.(?=.{4})/g, 'x');     
    });
});         
</script>

这将显示1233434343434456789012为xxxxxxxxxxxxxxxxxx9012

我需要它显示为1233xxxxxxxxxxxxxx9012,但字符串可以是任意长度所以123343434343需要显示为1233 **** 4343等

5 个答案:

答案 0 :(得分:2)

使用更简单的方法会好得多。拯救你自己一些时间和头痛并使用KISS方法。

var maxMaskLength = 10;
var minMaskLength = 4;
$(document).ready(function() {
    $('.read-only-mask').val(function(_, val) {
  var valSplit = val.split("");
  for (i = minMaskLength; i < maxMaskLength; i++)
    valSplit[i] = 'x';
  return valSplit.join("");
   });
 });

答案 1 :(得分:2)

我更喜欢这样做

&#13;
&#13;
var str = "1233434343434456789012",
    res = Array.prototype.map.call(str, (e,i) => i > 4 && i < 9 ? "X" : e).join("");
console.log(res);
&#13;
&#13;
&#13;

&#13;
&#13;
    var str = "1233434343434456789012",
        res = Array.prototype.map.call(str, (e,i,a) => i < a.length-4 ? "X" : e).join("");
    console.log(res);
&#13;
&#13;
&#13;

最适合您的应用。

答案 2 :(得分:1)

我会用这种方式:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="read-only-mask" title="" value="1233434343434456789012" name="" id=""readonly />
<script>
  $(document).ready(function() {
    $('.read-only-mask').val(function(_, val) {
      val = val.split("");
      for (i = 4; i < val.length; i++)
        val[i] = 'x';
      return val.join("");
    });
  });         
</script>

对于上述输入,它显示1233xxxxxxxxxxxxxxxxxx。如果这就是你需要的东西?

答案 3 :(得分:1)

真的不需要正则表达式,所有你做的就是3个子串

  • string start to mask start(1)
  • mask start to mask end(2)
  • 掩码结束到字符串结尾。 (3)

然后通过连接上面的(1),将掩码字符串连接到(2)和最后(3)的长度,将字符串重新组合在一起。

&#13;
&#13;
var input = "1234567890";

var output = input.substring(0,4) + (Array(3).join('*')) + input.substring(6,10)

console.log(output)
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以使用捕获括号:

 "111122222333".replace( /(.{4})(.{5})(.*)/, '$1xxxxx$3');
  • 1111将为1美元,由其自身取代。
  • 22222将为$ 2,由xxxxx取代。
  • 333将为3美元,由其自身取代。