smallest match in regular expression
I have this kind of expression:
var string = [a][1] [b][2] [c][3] 开发者_开发技巧[d .-][] [e][4]
I woud like to match the fourth element [d .-][]
which may contain any character (letters, numbers, punctuation, etc) within the first pair of bracket but the second pair of bracket remains empty. Other elements, for example, [a][1]
, may contain any character but they do have a number inside the second pair of brackets.
I tried this:
string.match(/\\[[^]+]\\[ ]/);
but it is too greedy.
Any help would be appreciated.
I woud like to match the fourth element [d .-][] which may contain any character (letters, numbers, punctuation, etc) within the first pair of bracket but the second pair of bracket remains empty
string.match(/\[[^\]]*\]\[\]/)
should do it.
To break it down,
\[
matches a literal left square bracket,
[^\]]*
matches any number of characters other than a right square bracket,
\]
matches a literal right square bracket, and
\[\]
matches the two character sequence []
, square brackets with nothing in between.
To answer your question about greediness though, you can make the greedy match [^]+
non-greedy by adding a question-mark: [^]+?
. You should know though that [^]
does not work in IE. To match any UTF-16 code-unit I tend to use [\s\S]
which is a bit more verbose but works on all browsers.
精彩评论