例如,我想匹配以下内容:
但不是:
到目前为止,我有以下解决方案:
^(?!.+\.bin\.js$).+\.js$
https://regex101.com/r/iR6yC9/1。这种方法的问题是.+
以及.js$
被拼写两次,所以感觉有点冗长和多余。
^(?:(?!\.bin\.js$).)+\.js$
https://regex101.com/r/zQ1kE0/1。第二种方法的问题在于,非捕获组内部的前瞻性使得它的可读性较差,尽管它可以重复使用' .+
我觉得这两种解决方案都不理想。我想知道是否有一个很好的正则表达式来解决这个更易读,更少冗余的问题
答案 0 :(得分:2)
如果Javascript具有负面的外观,那就是这样做的方法。由于它没有,最易读的解决方案(恕我直言)是使用两个正则表达式。
if (/\.js$/.test(filename) && !/\.bin\.js$/.test(filename))
如果你能用另一种具有负面看法的语言来做,那就是:
/(?<!\.bin)\.js$/
如果您阅读javascript regex - look behind alternative?,您会发现原始表达式是此缺失功能的常用解决方法之一。
答案 1 :(得分:0)
这种正则表达式起初是违反直觉的,直到你不得不与类似的几次争吵,然后它才有意义,但需要一些摆弄。
无论如何,这应该可以解决问题。/.*(?:[^n]|[^i]n|[^b]in|[^.]bin)\.js$/