编辑:从 ECMAScript 2018 开始,本机支持后视断言(甚至无界)。
在以前的版本中,您可以这样做:
^(?:(?!filename\.js$).)*\.js$
这明确地执行了后视表达式隐式执行的操作:如果后视表达式加上它之后的正则表达式不匹配,则检查字符串的每个字符,然后才允许该字符匹配。
^ # 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