正则表达式找到匹配,除了输入的最后n个字符

时间:2016-04-01 19:12:10

标签: javascript regex

我必须用'*'替换信用卡的第一个(n-4)个数字。 我正在使用以下三行代码。

var cardnumber = '1A2C3GF4DS84Ff'; 
last4digits = cardNumber.substring(cardNumber.length-4);
prevdigits  = cardNumber.substring(0, cardNumber.length-4).replace(/[0-9]/g,'*');
$cache.cardNumber.val( prevdigits + last4digits);

只是想知道我可以使用正则表达式在一行代码中完成。

6 个答案:

答案 0 :(得分:3)

使用前瞻确保数字后面至少有四个剩余字符。换句话说,最后四个字符中的数字将不匹配:

var regexp = /\d(?=....)/g;

> cardnumber.match(regexp)
< ["1", "2", "3", "4"]

替换为星号:

> cardnumber.replace(regexp, '*')
< "*A*C*GF*DS84Ff"

有关预测的信息是here

答案 1 :(得分:1)

here我得到了这段代码。

var text = '1ab2cb3cd4ab5cb6cd7';
var matches = text.match(/(\d)/g);

for (i=0; i<matches.length; i++) {
   alert(matches[i]);
}

实际上,他们也希望提取数字。我不需要改变正则表达式。

您可以通过以下方式将循环限制为:

for (i=0; i<matches.length && i < 5; i++){

答案 2 :(得分:0)

只需使用(\d),然后以编程方式进行检查。

答案 3 :(得分:0)

var y= x.replace(/\D/g, '').substring(0, 5);

答案 4 :(得分:0)

.replace()函数可以使用函数作为替换函数,并且将为每个匹配调用它。它可以保留一个计数器并根据计数器返回不同的东西。

var str = '1A2C3GF4DS84Ff';
var digits = 0;
var newstr = str.replace(/\d/g, function(match) {
  if (digits++ < 4) {
    return '*';
  } else {
    return match;
  }
});
document.write(newstr);

答案 5 :(得分:0)

看起来跟随一个人完成了你需要的工作:

var text= '1A2B3C4D5E6F',
    n = 5;
text = text.replace(/\d/g, function ($1){
  return n-- ?'*' : $1
});