我有一个属于多个域的电子邮件地址列表.我想要一个匹配属于三个特定域的地址的正则表达式(对于这个例子:foo,bar和baz)
所以这些匹配:
一个@ FOO
一间酒吧
b @巴兹
这不会:
一个@ fnord
理想情况下,这些也不匹配(尽管这对于这个特定问题并不重要):
一个@ foobar的
b @ foofoo
稍微抽象一下这个问题:我想匹配一个包含至少一个给定子串列表的字符串.
使用管道符号表示"或":
/a@(foo|bar|baz)\b/
如果您不想要捕获组,请使用非捕获分组符号:
/a@(?:foo|bar|baz)\b/
(当然我假设" a
"对于电子邮件地址的前面是可以的!你应该用合适的正则表达式替换它.)
^(a|b)@(foo|bar|baz)$
如果你有这个强烈定义的列表.开始和结束字符仅搜索这三个字符串.
使用:
/@(foo|bar|baz)\.?$/i
请注意与其他答案的区别:
\.?
-匹配0或1点,以防电子邮件地址中的域“完全限定”
$
-表示字符串必须以此序列结尾,
/i
-使测试用例不敏感。
注意,这假定每个电子邮件地址都单独位于一行上。
如果要匹配的字符串可能在字符串中的任何位置,请放下$
,并将其替换为\s+
(匹配一个或多个空格字符)