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

时间:2015-08-07 11:11:07

标签: regex mean.io

我使用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]'

]));

我知道他们正在尝试通过替换任何包含以下内容的网址来重写网址:

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

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

1 个答案:

答案 0 :(得分:5)

根据Apache mod_rewrite Introduction

  

在mod_rewrite中,可以在正则表达式之前使用!字符来否定它。也就是说,只有当字符串与表达式的其余部分不匹配时,才会认为该字符串已匹配。

^$regex anchors,分别在字符串的开头和结尾处断言。

要了解其余内容,您可以浏览What does the regex mean帖子。

正则表达式本身是:

  • ^ - 断言字符串位置的开始并且......
  • /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)匹配$