正则表达式开头的感叹号和结尾的美元符号是什么?
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|
- 或者这些扩展(注意它将匹配 jpg
和 jpeg
因为 ?
意味着 匹配前面模式的 0 或 1 次出现)
\.pdf$
- 匹配字符串末尾的 .pdf
($
).
我正在使用 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|
- 或者这些扩展(注意它将匹配jpg
和jpeg
因为?
意味着 匹配前面模式的 0 或 1 次出现)\.pdf$
- 匹配字符串末尾的.pdf
($
).