JavaScript 中的环视替代方案

Lookaround alternative in JavaScript

我尝试在 JavaScript 中使用 lookahead/lookbehind(在 Regular-Expressions.info 中有描述),但发现它们不受支持。

我实际上想做的是捕捉 dar,其后没有 win。因此,字符串 darblabla 应该 return true,而 darwinblabla 应该是 false.

现在,我的解决方案是:/dar/i.test(string) && !/darwin/i.test(string)

这看起来很长,有没有更短的解决方案(正则表达式字符串?)可以替换当前语句?

Javascript 应该支持负前瞻。

alert(/dar(?!win)/.test('darblahblah'))
alert(/dar(?!win)/.test('darwin'))

这是一个解决方案

^dar(?!win)

Debuggex Demo

编辑

关于你的第二个问题

^(?!cyg)win

Debuggex Demo

您不能在 JavaScript 中使用后视,但可以使用前视。

所以,这将产生 false:

document.write(/\bdar(?!win)/i.test("darwin"));

至于回顾,在大多数情况下,您可以通过使用捕获组、反转字符串和匹配项或构建您自己的解析器来解决该限制。

这里有一个方法可以结合/win/i.test(string) && !/cyg win/i.test(string):

document.write(/niw(?!\s+gyc\b)/.test('cyg win'.split("").reverse().join("")));
document.write("<br/>");
document.write(/niw(?!\s+gyc\b)/.test('darwin'.split("").reverse().join("")));

注意模式 - niw(?!\s+gyc\b) - 必须反转。