2011-07-06 64 views
2

予有这种表达:在正则表达式最小匹配

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

我woud喜欢至第四元件[d .-][]其可以在第一对中包含任何字符(字母,数字,标点符号等)相匹配支架但第二对支架保持空着。其他元素(例如​​)可能包含任何字符,但它们在第二对括号内有一个数字。

我尝试这样做:

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

,但实在是太贪婪。

任何帮助,将不胜感激。

回答

3

我喜欢woud至第四元件匹配[d .-] [],它们在第一对支架的但与第二对支架的内包含任何字符(字母,数字,标点符号等)保持为空

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

应该这样做。

进行分解,

\[相匹配的文字左方括号,

[^\]]*任何数量比右括号其他字符的匹配,

\]字面右方括号相匹配,和

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

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

+0

谢谢。它很棒!顺便说一句,关于使用[^] +的好建议。 –