Javascript 正则表达式查找除输入的最后n个字符外的匹配项

Javascript 正则表达式查找除输入的最后n个字符外的匹配项,javascript,regex,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 + la

我必须用“*”替换信用卡前(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);
我只是想知道我是否可以使用正则表达式在一行代码中完成它

以后以编程方式使用并检查它。

以后以编程方式使用并检查它。

我从中得到了这段代码

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

for (i=0; i<matches.length; i++) {
   alert(matches[i]);
}
var text='1ab2cb3cd4ab5cb6cd7';
var matches=text.match(/(\d)/g);
对于(i=0;i),我得到了这个代码

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

for (i=0; i<matches.length; i++) {
   alert(matches[i]);
}
var text='1ab2cb3cd4ab5cb6cd7';
var matches=text.match(/(\d)/g);
对于(i=0;i,
.replace()
函数可以使用一个函数作为替换函数,每次匹配都会调用它。它可以保留一个计数器,并根据计数器返回不同的值

var str='1A2C3GF4DS84Ff';
变量位数=0;
var newstr=str.replace(/\d/g,函数(匹配){
如果(数字+++<4){
返回“*”;
}否则{
复赛;
}
});
document.write(newstr);
函数
.replace()
可以使用一个函数作为替换函数,每次匹配都会调用它。它可以保留一个计数器,并根据计数器返回不同的内容

var str='1A2C3GF4DS84Ff';
变量位数=0;
var newstr=str.replace(/\d/g,函数(匹配){
如果(数字+++<4){
返回“*”;
}否则{
复赛;
}
});

document.write(newstr);
看起来下面的一个可以完成您需要的工作:

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

看起来下面的一个可以完成您需要的工作:

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

使用“向前看”确保数字后至少有四个剩余字符。换句话说,最后四个字符内的数字将不匹配:

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

> cardnumber.match(regexp)
< ["1", "2", "3", "4"]
var regexp=/\d(?=..)/g;
>cardnumber.match(regexp)
< ["1", "2", "3", "4"]
要替换为星号:

> cardnumber.replace(regexp, '*')
< "*A*C*GF*DS84Ff"
>卡号。替换(regexp,*)
<“*A*C*GF*DS84Ff”

有关look aheads的信息如下。

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

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

> cardnumber.match(regexp)
< ["1", "2", "3", "4"]
var regexp=/\d(?=..)/g;
>cardnumber.match(regexp)
< ["1", "2", "3", "4"]
要替换为星号:

> cardnumber.replace(regexp, '*')
< "*A*C*GF*DS84Ff"
>卡号。替换(regexp,*)
<“*A*C*GF*DS84Ff”


有关look aheads的信息为。

“字符的前n次出现”-什么字符?关于
D
?@l'l'l 1@RomanPerekhrest早些时候更新了我的问题,我试图使我的问题变得一般化,而最后三行是我面临的实际问题。无论如何,感谢你的解决办法。@paraSelixiR继续,接受你喜欢的答案。“字符的前n个出现”-什么性质?关于
D
?@l'l'l 1@RomanPerekhrest早些时候更新了我的问题,我试图使我的问题成为一般性的问题,而最后三行是我面临的实际问题。无论如何,谢谢你的解决方案。@paraSelixiR继续,接受你喜欢的答案。如果我用正则表达式找不到任何答案,那么是唯一可能的解决方案。但这实际上是使用一个Regexp,那么“用regex回答”是什么意思?你想在Regexp中指定n吗?这就是你的意思吗?@torazaburo明白了,很高兴知道!我想他指的是一个与他感兴趣的字符完全匹配的Regexp,用星号替换。如果我找不到任何字符的话用正则表达式回答这是唯一可能的解决方案。但这实际上是使用正则表达式,那么“用正则表达式回答”是什么意思?你想在正则表达式中指定n吗?这就是你的意思吗?@torazaburo明白了,很高兴知道!我想他指的是一个与他感兴趣的替换字符完全匹配的正则表达式星号。谢谢你,这就是我要找的!@NinaScholz请在对OP问题的评论中看到我的澄清问题。在他对该评论的回复中,OP确认问题在于替换输入中除最后四个字符以外的所有字符。有四个这样的数字。@paraSelixiR Nothing,我只是觉得有点文字呃。效果一样。谢谢你,这就是我想要的!@NinaScholz请在对OP问题的评论中看到我的澄清问题。在他对该评论的回复中,OP确认问题在于替换输入的最后四个字符以外的所有数字。有四个这样的数字。@paraSelixiR什么都没有,我只是认为是有点罗嗦,也一样。