2016-01-26 59 views
1
之间的正则表达式

让我们在下面的文本的Javascript括号

I want [this]. I want [this too]. I don't want \[this] 

说我想要的[]但不\[]之间的任何内容。我会怎么做呢?到目前为止,我有/\[([^\]]+)\]/gi。但它匹配了一切。

回答

0

使用这一个:/(?:^|[^\\])\[(.*?)\]/gi

这里有一个工作示例:http://regexr.com/3clja

  • ?:非捕获组
  • ​​Beggining字符串或任何东西,但[]
  • 之间 \
  • \[(.*?)\]匹配任何

这里有一个片段:

var string = "[this i want]I want [this]. I want [this too]. I don't want \\[no]"; 
 
var regex = /(?:^|[^\\])\[(.*?)\]/gi; 
 
var match = null; 
 

 
document.write(string + "<br/><br/><b>Matches</b>:<br/> "); 
 
while(match = regex.exec(string)){ 
 
    document.write(match[1] + "<br/>"); 
 
}

+0

这不适用于'\ [no] [yes]'。 –

+0

是的,它确实与那种情况:) http://regexr.com/3clmj –

-1

/(?:[^\\]|^)\[([^\]]*)/g

内容是第一个捕捉组,$ 1

(?:^|[^\\])一行的开头匹配或任何的不是斜线,不捕获。

\[匹配一个开放的括号。

([^\]]*)捕获的任何数量的不是封闭括号连续字符

\]匹配的右括号

+1

这不匹配[在开始的东西] –

+0

啊谢谢!修复。 – paulgoblin

0

使用此正则表达式,其中第一匹配\[]版本(但不捕获它,从而“扔它扔掉“),那么[]案件,捕捉里面有什么:

var r = /\\\[.*?\]|\[(.*?)\]/g; 
     ^^^^^^^^^     MATCH \[this] 
        ^^^^^^^^^  MATCH [this] 

环路与exec让所有的比赛es:

while(match = r.exec(str)){ 
    console.log(match[1]); 
}