一尘不染

javascript正则表达式-寻找替代方案吗?

javascript

这是一个在大多数正则表达式实现中都能正常工作的正则表达式:

(?<!filename)\.js$

这与.js匹配以.js结尾的字符串,但filename.js除外

Javascript没有后面的正则表达式。有谁能放在一起实现相同结果并可以在javascript中工作的替代正则表达式?

这里有一些想法,但需要帮助功能。


阅读 368

收藏
2020-04-25

共2个答案

一尘不染

^(?!filename).+\.js 为我工作

经过测试:

  • test.js match
  • blabla.js match
  • filename.js no match

可以在正则表达式中找到此正则表达式的正确解释,以匹配不包含单词的字符串?

从JavaScript1.5版开始,可以使用“向前看”功能,并且所有主要浏览器都支持“向前看”功能

更新 以匹配filename2.js和2filename.js,但不匹配filename.js

(^(?!filename\.js$).).+\.js

2020-04-25
一尘不染

在以前的版本中,你可以执行以下操作:

^(?:(?!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
2020-04-26