【问题标题】:Add regex to ignore /js /img and /css添加正则表达式以忽略 /js /img 和 /css
【发布时间】:2013-06-27 03:46:30
【问题描述】:

我有这个正则表达式

// Look for /en/ or /en-US/ or /en_US/ on the URL
    var matches = req.url.match( /^\/([a-zA-Z]{2,3}([-_][a-zA-Z]{2})?)(\/|$)/ );

现在使用上面的正则表达式会导致URL出现问题,例如:

http://mydomain.com/css/bootstrap.css

http://mydomain.com/js/jquery.js

因为我的正则表达式是从 A-Z 或 a-z 中去掉 2-3 个字符

我的问题是如何添加到这个正则表达式中以不使用

jsimgcssext

不影响原版。

我在正则表达式方面不是那么专家:(

【问题讨论】:

  • 您使用哪种语言/工具?
  • 我正在使用 Javascript/node.js @Anirudh
  • 如果你写正确的正则表达式,像img、css和ext这样的字符串不应该被捕获
  • @AurelioDeRosa 是的,这就是为什么我需要一些帮助才能将这三个条件添加到我的正则表达式中
  • @Ali 你为什么不使用内置的 URL 解析器? nodejs.org/api/url.html

标签: javascript regex node.js url


【解决方案1】:

由于您说您使用正则表达式替换文本,所以我将其更改为替换功能。此外,您强制正则表达式匹配字符串的开头;我看不出它会如何与之匹配。无论如何,这是我的方法:

var result = req.url.replace(/\/([a-z]{2,3}([-_][a-z]{2})?)(?=\/|$)/i,
  function(s,t){
    switch(t){case"js":case"img":case"css":case"ext":return s;}
    return "";
  }
);

【讨论】:

    【解决方案2】:

    首先,您还没有明确您要搜索的内容。 用小写的通用语言代码定义一个数组 (Common language codes) 这样您就知道要寻找什么了。

    之后,将您的 url 转换为小写,并将所有 '_' 替换为 '-' 并使用 indexOf() 在结果字符串中搜索数组的每个成员。

    【讨论】:

      【解决方案3】:

      负前瞻?

      var matches = req.url.match(/^\/(?!(js|css))([a-zA-Z]{2,3}([-_][a-zA-Z]{2})?)(\/|$)/ );
      

      \ 不是后跟jscss

      【讨论】:

      • 由于某种原因我收到此错误 500 TypeError: Cannot call method 'replace' of undefined
      • 请注意,如果您使用的是匹配结果 - 数字会发生一些变化,因为我添加了额外的“()”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2020-08-06
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多