4

我想设置一个与 URL 的某些模式匹配的正则表达式:

http://www.domain.com/folder1/folder2/anything/anything/index.html

这匹配,并完成工作:

/^http:\/\/www\.domain\.com\/folder1\/folder2\/.*\/.*\/index\.html([\?#].*)?$/.test(location.href)

我不确定如何将通配符限制为一个文件夹。那么如何防止以下匹配:

http://www.domain.com/folder1/folder2/folder3/folder4/folder5/index.html

(注意:文件夹 5+ 是我想要阻止的)

谢谢!

4

5 回答 5

2

试试这个正则表达式:

/^http:\/\/www\.domain\.com\/(?:\w+\/){1,3}index\.html([\?#].*)?$/

将数字3更改为可能的最大文件夹深度。

于 2013-05-23T13:42:34.273 回答
1

/^http:\/\/www\.domain\.com\/folder1\/folder2\/[^/]*\/[^/]*\/index\.html([\?#].*)?$/

我不记得我们是否应该逃避[]. 我不这么认为。

编辑:Aknoledgeing tom 的评论使用 + 而不是 *: /^http:\/\/www\.domain\.com\/folder1\/folder2\/[^/]+\/[^/]+\/index\.html([\?#].*)?$/

于 2013-05-23T13:38:36.040 回答
1

.匹配任何字符。

[^/]匹配除 . 之外的任何字符/

由于该/字符标记正则表达式文字的开始和结束,因此您可能必须像这样对它们进行转义:[^\/].

因此,替换.*[^\/]*将做你想要的:

/^http:\/\/www\.domain\.com\/folder1\/folder2\/[^\/]*\/[^\/]*\/index\.html([\?#].*)?$/.test(location.href)
于 2013-05-23T13:38:57.593 回答
1
/^http:\/\/www\.domain\.com\/\([^/]*\/\)\{2\}/

您可以将 2 更改为您想要匹配的任意数量的目录。

于 2013-05-23T13:42:21.277 回答
0

您可以使用:

^http:\/\/www\.domain\.com\/folder1\/folder2\/(\w*\/){2}index\.html([\?#].*)?$/.test(location.href)
于 2013-05-23T13:41:26.633 回答