我正在尝试编写一个匹配域名的正则表达式,如下所示:
NS1.MDNSSERVICE
NS.INMOTIONHOSTING
忽略其他条目,尤其是那些不包含任何点(。)
的条目但是,我得到的结果与我的理解不一致。这是我的代码:
var regex = new RegExp("^[a-z0-9-]+\.[a-z0-9-]+(\.[a-z0-9-]+){0,2}$", "i");
"file".match(regex);
输出
[ 'file',
undefined,
index: 0,
input: 'file' ]
我的理解是:
^ : match the beginning of line
[a-z0-9-]+ : match one of more occurrence of alphanumeric or hyphen(-).
\. : match the literal dot(.)
由于我明确提到要匹配点(。),不确定为什么它会返回与" file"等关键字匹配的匹配项。
答案 0 :(得分:2)
您需要使用升格符号或以构造函数表示法双重转义元字符。这里有一个文字表示法,因为你的模式不是动态构建的:
/^[a-z0-9-]+\.[a-z0-9-]+(\.[a-z0-9-]+){0,2}$/i
请参阅代码段:
var regex = /^[a-z0-9-]+\.[a-z0-9-]+(\.[a-z0-9-]+){0,2}$/i;
console.log("file".match(regex)); // --> null
console.log("NS.INMOTIONHOSTING".match(regex));
// --> ["NS.INMOTIONHOSTING", undefined, index: 0, input: "NS.INMOTIONHOSTING"]