请帮助我处理我的正则表达式。目前,我们有替换单词/模式的代码。如果我只输入 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
,但这不起作用。
预期的行为是匹配任何模式,即使它在句子或段落中。
使用
^
和 $
会将表达式锁定到字符串的开头和结尾。 因此,只有当整个字符串与表达式匹配时,您的正则表达式才会匹配。 为了使其与字符串的部分匹配,您需要删除这些部分。
类似下面的内容现在将解析它。
"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