PAC 中的 shExpMatch 使用通配符,而不是正则表达式
代理规则看起来可能正确,却始终无法匹配,因为 shExpMatch 与 JavaScript 正则表达式使用不同的模式语言。
在 PAC 中,shExpMatch 使用 shell 风格的通配符。对于 example.com 的子域:
if (shExpMatch(host, "*.example.com")) {
return "PROXY proxy.example:8080";
}在这些返回值中请使用策略所选的 HTTP 端点;HTTP 代理列表为允许的公开路由提供候选。星号匹配一串字符。它不是正则表达式的重复运算符,因此看起来像正则的 .*example.com 会改变含义。
当确切的父域名属于策略范围时,请显式包含它:
if (host === "example.com" || shExpMatch(host, "*.example.com")) {
return "PROXY proxy.example:8080";
}改用 *example.com 也会接受以这些字母结尾、但没有分隔点的名称。这就把集合扩大到了预期域名边界之外。
可移植的 PAC 通配符基准包含 * 和 ?;字符类因实现而异。JavaScript 正则则使用 test() 及其自身的锚定和转义规则。
要匹配预期的输入。host 是主机名,而 url 包含协议,并且可能已被清理。域名规则不应意外依赖浏览器从不会提供的路径。