正则表达式匹配域和子域

时间:2017-06-13 20:49:02

标签: javascript node.js regex pattern-matching

说我想查看电子邮件是否与nabisco.com或nabisco.com的子域匹配,例如x.nabisco.com。

所以我们有这个:

/.+@.*nabisco\.com$/.test(email)

但这个正则表达式的问题在于它会接受这样的电子邮件:

bar@foonabisco.com

但我们需要将其限制为

bar@foo.nabisco.com

我怎样才能成为第一个。所需的字符,以子域的存在为条件?

问题是这个正则表达式还需要匹配bar@nabisco.com,没有子域名。

3 个答案:

答案 0 :(得分:2)

你可以使用pos的解决方案。先行:

warning: [unchecked] unchecked call to compare(T,T) as a member of the
raw type Comparator  [multiant]               for (int j=i; j>low &&
c.compare(source[dest[j-1]], source[dest[j]])>0; j--) {

请参阅a demo on regex101.com

<小时/> 这将查找(?=.*\bnabisco\b)\S*@\S+ 两侧的单词边界,因此以下内容将匹配:

nabisco

虽然这些赢了:

bar@foo.nabisco.com
bar@nabisco.com

答案 1 :(得分:1)

/.+@(.*\.)?nabisco\.com$/.test(email)

这应该这样做。

How it works

添加(.*\.)?后,您声明nabisco之前的任何内容都必须由.继承。括号后面的?指定整个部分(比如foo.匹配)或者没有匹配(因此foonabisco将不匹配)。

如果您不想匹配test@foo.bar.nabisco.com之类的内容,那么您的正则表达式应为/.+@(.*?\.)?nabisco\.com$/

答案 2 :(得分:1)

您可以使用以下正则表达式

/^(https?|ftp):\/\/[.a-z]+\.domain\.com[.a-z0-9/-]+/

它可能对你有帮助