Javascript正则表达式以字符串和掩码形式查找信用卡号码

Javascript正则表达式以字符串和掩码形式查找信用卡号码,javascript,regex,Javascript,Regex,我想搜索字符串并屏蔽信用卡的安全性 "Hi here is my card number its visa 4242 4242 4242 4242" "Hi here is my card number its visa 4242424242424242" "Hi here is my card number its visa 4242-4242-4242-4242" 应转换为: "Hi here is my card number its visa **** **** **** 4242"

我想搜索字符串并屏蔽信用卡的安全性

"Hi here is my card number its visa 4242 4242 4242 4242"
"Hi here is my card number its visa 4242424242424242"
"Hi here is my card number its visa 4242-4242-4242-4242"
应转换为:

"Hi here is my card number its visa **** **** **** 4242"
我需要用Javascript在客户机上执行此操作。我知道网上有很多资源和问题等等

我发现了两个正则表达式,但都抛出错误:“uncaughtsyntaxerror:无效或意外的令牌”

我认为表达式与JS不兼容

我也知道他们会返回字符串,然后我会转换字符串(屏蔽它),然后对原始字符串使用简单的替换


有人能帮我解决这个问题的regex部分吗?

regexp可以作为字符串传递。“或regexp对象
/../
。(当作为字符串传递时,它将转换为RegExp对象,如
newregexp(“…”)

在第一种情况下,由于双引号之间的特殊含义,反斜杠必须加倍

 "Hi here is my card number its visa 4242 4242 4242 4242".match("\\b(\\d{4}[- ]?){4}")

  • \b
    将位置断言为单词边界。如果您想抓住诸如“我的签证是1234567812345678”之类的情况,可以删除此项
  • (?:\d{4}[-]?){3}
    精确匹配以下3次
    • \d{4}
      匹配任意数字4次
    • [-]?
      可以选择匹配空格或连字符
  • (?=\d{4}\b)
    正向前瞻,确保后面是4位数字(并确保后面不是单词字符)。与我的第一点类似,捕获后面跟单词的卡号,如
    我的visa卡号码是1234567812345678请小心使用
    ,改用
    (?=\d{4}(?!\d))
const r=/\b(?:\d{4}[-]?){3}(?=\d{4}\b)/gm
常数a=[
“嗨,这是我的卡号,visa 4242”,
“嗨,这是我的卡号,visa 4242”,
“嗨,这是我的卡号,它的visa 4242-4242-4242-4242”
]
常量subst=`********`
a、 forEach(函数){
控制台日志(s.replace(r,subst))

})
您应该看看javascript中正则表达式的语法:有人能解释一下为什么这些问题被否决吗。问什么似乎越来越难了,那么,有人能解释一下这个问题在哪里没有得到批准吗?@MartinWebb,我也不确定。但是您遇到的最初问题是
\d
无效。您需要转义
\
。第二个示例可以工作,而不需要将模式包装在
/
中。另外,
[-]\b
在您的情况下不会匹配任何内容,因为
\b
匹配单词字符和非单词字符之间的位置(或行首/行尾)。我真的认为你的问题被否决了。没有使用标记(我编辑了你的问题以使其更清晰)和/或2。因为人们认为每个人都应该知道您需要转义
\
或定义正则表达式pattern@KyleFairns我同意你的看法。想看看整洁的吗?68次否决票。我很困惑,为什么当社区乐于解决一个问题时,人们只是提出问题并否决投票。你的回答很完美-谢谢你。@MartinWebb别担心!我很高兴我能帮上忙:)我的答案是关于问题中的语法,OP不知道
"Hi here is my card number its visa 4242 4242 4242 4242".match(\b4\d{3}[ -]?\d{4}[ -]?\d{4}[ -]?\d{4}[ -]\b)
 "Hi here is my card number its visa 4242 4242 4242 4242".match("\\b(\\d{4}[- ]?){4}")
 "Hi here is my card number its visa 4242 4242 4242 4242".match(/\b(\d{4}[- ]?){4}/)
\b(?:\d{4}[ -]?){3}(?=\d{4}\b)