正则表达式作为句子的一部分时与 SSN 或 CC 不匹配

问题描述 投票:0回答:1

请帮助我处理我的正则表达式。目前,我们有替换单词/模式的代码。如果我只输入 SSN,如

123-12-1234
。 它将被
***********
取代。但是,如果我输入
"My SS# is 123-12-1234"
,它将不起作用,因为它是句子的一部分。我不确定为什么我的正则表达式与此不匹配。这是:

^(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}$^(?!(000|666|9))\d{3},(?!00)\d{2},(?!0000)\d{4}$

我尝试使用其他正则表达式,例如:

/\b\d{3}-\d{2}-\d{4}\b/g
,但这不起作用。 预期的行为是匹配任何模式,即使它在句子或段落中。

javascript regex regex-group regexp-replace
1个回答
0
投票

使用

^
$
会将表达式锁定到字符串的开头和结尾。 因此,只有当整个字符串与表达式匹配时,您的正则表达式才会匹配。 为了使其与字符串的部分匹配,您需要删除这些部分。

类似下面的内容现在将解析它。

"jfjk dj fjdkf dj343-22-8031".match(/(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}|(?!(000|666|9))\d{3},(?!00)\d{2},(?!0000)\d{4}/g)

你可以声明它必须在单词边界上,如下所示:

"jfjk dj fjdkf dj 343-22-8031".match(/\b(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}\b|\b(?!(000|666|9))\d{3},(?!00)\d{2},(?!0000)\d{4}\b/g) // matches 343-22-8031

"jfjk dj fjdkf 1111343-22-8031".match(/\b(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}\b|\b(?!(000|666|9))\d{3},(?!00)\d{2},(?!0000)\d{4}\b/g) // does not match
© www.soinside.com 2019 - 2024. All rights reserved.