2

我有这样的表达:

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

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

我试过这个:

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

但它太贪心了。

任何帮助,将不胜感激。

4

1 回答 1

3

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

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

应该这样做。

为了打破它,

\[匹配文字左方括号,

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

\]匹配文字右方括号,并且

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

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

于 2011-07-06T02:43:36.647 回答