d-_-b
d-_-b

Reputation: 23161

regex limiting wildcards for url folders

I'd like to set up a regular expression that matches certain patterns for a URL:

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

This matches, and gets the job done:

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

I'm unsure how to limit the wildcards to one folder each. So how can I prevent the following from matching:

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

(note: folder 5+ is what I want to prevent)

Thanks!

Upvotes: 4

Views: 1699

Answers (5)

Alex Filipovici
Alex Filipovici

Reputation: 32541

You may use:

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

Upvotes: 0

Arnaud Le Blanc
Arnaud Le Blanc

Reputation: 99889

. matches any character.

[^/] matches any characters except /.

Since the / character marks the begining and end of regex literals, you may have to escape them like this: [^\/].

So, replacing .* by [^\/]* will do what you want:

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

Upvotes: 1

Aziz Shaikh
Aziz Shaikh

Reputation: 16524

Try this regular expression:

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

Change the number 3 to the maximum depth of folders possible.

Upvotes: 2

unxnut
unxnut

Reputation: 8839

/^http:\/\/www\.domain\.com\/\([^/]*\/\)\{2\}/

And you can change 2 to whatever number of directories you want to match.

Upvotes: 1

Sebas
Sebas

Reputation: 21522

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

I don't remember whether we should escape the slashes within the []. I don't think so.

EDIT: Aknoledging tom's comment using + instead of *: /^http:\/\/www\.domain\.com\/folder1\/folder2\/[^/]+\/[^/]+\/index\.html([\?#].*)?$/

Upvotes: 1

Related Questions