(?:X)
在正则中表示所匹配的子组X
不作为结果输出
正常情况(X)
中的X
会被作为新增的一个组序号输出,比如(A)(B)
,A
的序号1
,B
的序号2
如果(?:A)(B)
,A
将没有序号不输出,B
的序号为1
/*规范化url,去掉后面的查询字符串,可选的反斜杠,并将它变为小写*/
var path = req.url.replace(/\/?(?:\?.*)?$/, '').toLowerCase();
\/
一个 / 字符
\/?
有或没有 / 字符
(?:)
匹配组, ?:
用於标记该匹配组不应被捕获
\?
一个 ? 字符
.
除了行分隔符以外的任意字符
*
重复0至任意次
.*
任意个除了行分隔符以外的字符
(?:\?.*)?
有或没有均可
$
匹配字符串的终止位置
总结起来, 该正则用於匹配出URL尾部的蒐索部分
例如
..../?abc
匹配出 /?abc
...?abc
匹配出 ?abc
.../
匹配出 /
.../efg
匹配出空字符串