编辑:从 ECMAScript 2018 开始,本机支持 lookbehind 断言(甚至是无界的)。
在以前的版本中,您可以执行以下操作:
^(?:(?!filename\.js$).)*\.js$
这明确地执行了 lookbehind 表达式隐式执行的操作:检查字符串的每个字符,如果 lookbehind 表达式加上它后面的正则表达式不匹配,则只允许该字符匹配。
^ # Start of string
(?: # Try to match the following:
(?! # First assert that we can't match the following:
filename\.js # filename.js
$ # and end-of-string
) # End of negative lookahead
. # Match any character
)* # Repeat as needed
\.js # Match .js
$ # End of string
另一个编辑:
我很痛苦地说(特别是因为这个答案已经被投票了这么多),有一种更容易的方法来实现这个目标。没有必要检查每个字符的展望:
^(?!.*filename\.js$).*\.js$
同样有效:
^ # Start of string
(?! # Assert that we can't match the following:
.* # any string,
filename\.js # followed by filename.js
$ # and end-of-string
) # End of negative lookahead
.* # Match any string
\.js # Match .js
$ # End of string