【发布时间】:2011-11-14 15:07:02
【问题描述】:
这是一个在大多数正则表达式实现中都能正常工作的正则表达式:
(?<!filename)\.js$
这匹配 .js 以 .js 结尾的字符串,除了 filename.js
Javascript 没有正则表达式后视。有没有人可以组合一个替代的正则表达式来实现相同的结果并在 javascript 中工作?
这里有一些想法,但需要辅助函数。我希望只用一个正则表达式来实现它: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
【问题讨论】:
-
如果您只需要检查特定文件名或文件名列表,为什么不只使用两次检查呢?检查它是否以 .js 结尾,如果是,请检查它是否与 filename.js 不匹配,反之亦然。
-
更新:最新的公共 Chrome 版本 (v62) 包括(可能是实验性的)开箱即用的lookbehinds :D 但请注意,lookbehinds 仍处于提案阶段 3:github.com/tc39/proposal-regexp-lookbehind。因此,可能需要一段时间才能让 JavaScript 到处都支持它。在生产中使用时最好小心!
-
# 更新:ES2018 包括 lookbehind assertions Plus:- dotAll 模式(s 标志)- Lookbehind 断言- 命名捕获组- Unicode 属性转义
-
只需将
(?<=thingy)thingy用于正向后视,(?<!thingy)thingy用于负向后视。 现在它支持它们。 -
@K._ 截至 2018 年 2 月 这不是真的!而且还需要一些时间,因为浏览器和引擎必须实现规范(草案中的当前版本)。
标签: javascript regex