是否可以仅使用环视来匹配前后不重复的字符?

Is it possible to use only lookaround to match characters that are not repeated immediately before and after?

例如匹配URL.
中域名后的第一个斜杠 意图:只匹配 '.com/...' 中的 '/' 但不匹配 'https://'.

中的任何 '/'
url = 'https://example.com/...';
[
url.match(       /(?<!\/)(?<slash>\/)(?!\k<slash>).../), // [A]
url.match(/(?<!\k<slash>)(?<slash>\/)(?!\k<slash>).../)  // [B]
]

上面的[A]returns是正确的匹配,但是[B]是我想要的种类 (虽然它没有匹配任何字符),也就是说,在正则表达式正文中只使用/字符1次

是否有广义表达式形式类似于[B](使用捕获组等)并且只使用正则表达式文字(而不是使用构造函数(RegExp))?

如果您所有的输入都是 URL,这将执行您想要的操作:

/\/\/.+?(\/)/

然后捕获第一组:

url = 'https://example.com/...';
const matches = url.match(/\/\/.+?(\/)/);
console.log(matches[1]);

您可以在否定前瞻中的可选字符之后放置肯定回顾。 lookbehind 断言 2 个连续的斜杠(使用引用)。这样,lookbehind 测试捕获的斜杠位置以及之前的位置。显然,当它成功时,否定前瞻失败。

/(\/)(?!.?(?<={2}))/

(随意使用命名捕获)

或没有捕获:

/\/(?!.?(?<=\/\/))/