正则表达式中的负面前瞻似乎不起作用
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)
我正在尝试使用正则表达式从遵循严格模式的 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)