正则表达式开头的感叹号和结尾的美元符号是什么?

What's the exclamation mark at the beginning and dollar sign at the end of regex?

我正在使用 Mean.io 并在 modRewrite 函数中看到一个正则表达式:

app.use(modRewrite([

   '!^/api/.*|\_getModules|\.html|\.js|\.css|\.mp4|\.swf|\.jp(e?)g|\.png|\.gif|\.svg|\.ico|\.eot|\.ttf|\.woff|\.pdf$ / [L]'

]));

我知道他们正在尝试通过替换任何包含以下内容的 url 来重写 url 以使其更漂亮:

/api/, _getModules, .html, .js, ..., .pdf

但是,我一直在搜索以了解正则表达式,但仍然无法弄清楚行首的 !^ 和行尾的 $ 是什么线。有人可以逐步提取正则表达式吗?

根据Apache mod_rewrite Introduction

In mod_rewrite the ! character can be used before a regular expression to negate it. This is, a string will be considered to have matched only if it does not match the rest of the expression.

^$regex anchors,分别断言字符串开始和结束的位置。

要了解其余部分,您可以阅读 What does the regex mean post。

正则表达式本身是:

  • ^ - 断言字符串位置的开始和...
  • /api/.* - 按字面匹配 /api/ 和换行符
  • 以外的 0 个或更多字符
  • | - 或者...
  • \_getModules - 匹配 _getModules
  • | - 或者
  • \.html - 匹配 .html
  • |\.js|\.css|\.mp4|\.swf|\.jp(e?)g|\.png|\.gif|\.svg|\.ico|\.eot|\.ttf|\.woff| - 或者这些扩展(注意它将匹配 jpgjpeg 因为 ? 意味着 匹配前面模式的 0 或 1 次出现)
  • \.pdf$ - 匹配字符串末尾的 .pdf ($).