正则表达式中的最小匹配

时间:2011-07-06 02:31:25

标签: javascript regex greedy

我有这种表达方式:

var string = [a][1] [b][2] [c][3] [d .-][] [e][4]

我想匹配第四个元素[d .-][],它可能包含第一对括号内的任何字符(字母,数字,标点符号等),但第二对括号仍为空。其他元素,例如[a][1],可以包含任何字符,但它们在第二对括号内有一个数字。

我试过了:

string.match(/\\[[^]+]\\[ ]/);

但太贪心了。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

  

我想匹配第四个元素[d .-] [],它可能包含第一对括号内的任何字符(字母,数字,标点符号等),但第二对括号仍为空

string.match(/\[[^\]]*\]\[\]/)

应该这样做。

要打破它,

\[匹配文字左方括号

[^\]]*匹配除右方括号以外的任意数量的字符

\]匹配文字右方括号,

\[\]匹配两个字符序列[],方括号中间没有任何内容。

要回答关于贪婪的问题,您可以通过添加问号[^]+来使贪婪的匹配[^]+?非贪婪。您应该知道[^]在IE中不起作用。为了匹配任何UTF-16代码单元,我倾向于使用[\s\S],它更冗长,但适用于所有浏览器。