Javascript Regex - 获取所有带方括号[]的字符串

时间:2014-11-18 03:20:39

标签: javascript regex

我有一些字符串,值类似于jquery选择器。

var someVar = "somestring[a=0]what[b-c=twelve]----[def=one-2]test";

我需要获取包含方括号[]的所有字符串,作为数组

["[a=0]", "[b-c=twelve]", "[def=one-2]"];

我已尝试使用此正则表达式/\[(.*?)\]/但仅返回第一个数组。并且它也返回与第一个相同的值,但没有方括号。我需要一个带方括号的那个。

someVar.match(/\[(.*?)\]/); // result => ["[a=0]", "a=0"]

实现这一目标的正则表达式是什么?感谢

4 个答案:

答案 0 :(得分:5)

您想使用g(全局)修饰符来查找所有匹配项。由于括号包含在匹配结果中,因此您不需要使用捕获组,而是使用否定来消除回溯量。

someVar.match(/\[[^\]]*]/g);

答案 1 :(得分:1)

  1. /\[(.*?)\]/中,*?表示懒惰,匹配尽可能少的内容。
  2. 你真正想要的是内容中的所有匹配。尝试修饰符g
  3. 试试这个,http://regex101.com/r/aD6cM8/1。任何匹配均以[开头,以]结尾,但不允许[]介于其中。
  4. someVar.match(/\[([^\[\]]*)\]/g)

答案 2 :(得分:0)

您应该将g开关添加到正则表达式:

someVar.match(/\[(.*?)\]/); // result => ["[a=0]", "a=0"]

结果

[ "[a=0]", "[b-c=twelve]", "[def=one-2]" ]

答案 3 :(得分:0)

你的正则表达式是正确的,只是后缀g才能使它成为全局:

someVar.match(/\[(.*?)\]/g);

以下是其中的更多信息:http://www.w3schools.com/jsref/jsref_regexp_g.asp