0

考虑您正在搜索出现在 B 之后的 C。为什么以下代码返回 -1 而不是 2:

console.log('abc'.search(/(?=b)c/));
4

1 回答 1

7

因为(?=是向前看,而不是向后看

q(?=u)匹配q后跟 a 的 a u,而不使 u 成为匹配的一部分。


在你问之前:JavaScript regex 不支持 lookbehind。但是,在这种简单的情况下,您可以使用基于前瞻的解决方法:

var index = 'abc'.search(/b(?=c)/);
if (index !== -1) index++;
console.log(index);

之所以有效,是因为您正在寻找 的 位置,c但这b在逻辑上与 的位置 大于 1b相同c

但是,在您太兴奋之前:您不需要正则表达式。完全没有。

var index = 'abc'.indexOf('bc');
if (index !== -1) index++;
console.log(index);
于 2012-05-13T06:13:39.373 回答