正则表达式中的负面前瞻似乎不起作用

Negative Look-ahead in Regex doesn't seem to be working

我正在尝试使用正则表达式从遵循严格模式的 url 中提取子域。我只想匹配 urls 与指定的子域 ,所以我使用了否定前瞻。这似乎在许多正则表达式评估器中都有效,但是当我在节点中 运行 时,两个字符串都匹配。这是代码:

const defaultDomain = 'https://xyz.domain.com';
const scopedDomain = 'https://xyz.subdomain.domain.com';

const regex = /^https:\/\/xyz\.([^.]+(?!domain))\./
const matchPrefix1 = defaultDomain.match(regex);
const matchPrefix2 = scopedDomain.match(regex);

console.log(matchPrefix1);
console.log(matchPrefix2);

预期: matchPrefix1 为 null,matchPrefix2 导致第一个捕获组为 'subdomain'

的匹配

实际: matchPrefix1 和 matchPrefix2 都包含数据,捕获组分别返回 'domain' 和 'subdomain'

Link 到正则表达式(有效!):https://regexr.com/42bfn

Link 回复(不起作用):https://repl.it/@tomismore/SpiffyFrivolousLaws

这是怎么回事?

Regexr 显示您的代码有效,因为您没有添加多行标志。这会导致第二行的开头与 ^ 不匹配,因此整个第二行将被忽略。添加多行标志以查看您的正则表达式不起作用。

我会使用这个正则表达式:

^https:\/\/xyz\.(?!domain)([^.]+)\.

我所做的更改是将[^.]+部分移动到检查(?!domain)之后。基本上,您应该在匹配 xyz\..

后立即检查 (?!domain)