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)
编辑
关于你的第二个问题
^(?!cyg)win
您不能在 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)
- 必须反转。
我尝试在 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)
编辑
关于你的第二个问题
^(?!cyg)win
您不能在 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)
- 必须反转。