【问题标题】:NOT a specific word at ending in regex不是以正则表达式结尾的特定单词
【发布时间】:2013-08-26 18:54:55
【问题描述】:

我有这些字符串:

"/page/test/myimg.jpg"
"/page/test/"
"/page2/test/"
"/page/test/other"

我希望所有以 /page/test 开头的字符串都为 true,除非它以 .jpg 结尾。

然后我做了:/^\/page\/test(.*)(?!jpg)$/。 好吧,它不工作。 :\

它应该像这样返回:

"/page/test/myimg.jpg" // false
"/page/test/" // true
"/page2/test/" // false
"/page/test/other" // true

【问题讨论】:

  • 你真的不能像那样做负面查找而不做一些诡计。看看stackoverflow.com/questions/406230/… 已经彻底回答了这个问题。
  • 我们在这里讨论的是什么语言?
  • @MadaraUchiha .htaccess

标签: javascript regex .htaccess


【解决方案1】:

使用 JavaScript 轻松完成:

/^(?!.*\.jpg$)\/page\/test/

【讨论】:

  • +1 我不知道 javascript 不支持向后看,但确实支持向前看。
【解决方案2】:

在锚定到结束时使用负面的外观:

/^\/page\/test(.*)(?<!\.jpg)$/

为清楚起见,此正则表达式将匹配任何 * 不以 .jpg 结尾的输入:

^.*(?<!\.jpg)$

编辑(现在也必须在 JavaScript 中工作)

JavaScript 不支持向后看,所以必须使用这个丑陋的选项,即最后 4 个字符中的至少一个必须不是.jpg

^.*([^.]...|.[^j]..|..[^p].|...[^g])$

【讨论】:

  • 谢谢!错过&lt;?&lt;!。对于完整的解释,我可以在 ?&lt;! 的 javascript 正则表达式中使用什么?
  • 您可以使用任何长度有限的表达式。如果您需要.*,请限制它,例如.{0,99}
  • 对不起。 ?&lt;! 在 JavaScript 正则表达式中不存在。你知道它的替代品吗(如果它至少存在的话)?我在 .htaccess 和 javascript 中做同样的事情。
  • 那么这是一个不同的问题 - 我已经更新了问题标签并提供了答案。
  • 不需要丑陋的选项(并且不需要向后看)。看我的简单回答。
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2018-02-26
相关资源
最近更新 更多