2012-09-20 25 views
0

我有一个看起来像这些javascript正则表达式,一次分割和匹配?

inspect [foo - bar] with [errors - 15] 
create [doodle] 
force delete [quux] 

也就是说,其中含有方括号内的信息输入线串。

我想是走在时间的线路之一,并得到像

["inspect", "[foo - bar], "with", "[errors - 15]"] 

阵列使用正则表达式可以很容易地单独收集括号内的表达式之间的括号内的表达式和部分:

var src = "inspect [foo - bar] with [errors - 15]" 
var regexBracketed = /\[[a-zA-Z0-9_\- ]+\]/g; 

// this returns an array of the bracketed expressions 
console.log(src.match(regexBracketed)); 

// and this returns an array of the parts between the expressions 
console.log(src.split(regexBracketed)); 

是否有一种简单的方法可以在一个数组中获得所有内容?也许我完全用错误的方式来攻击它。

回答

2

你指的是组(捕获圆括号)吗? /(.*)/

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions#Using_Parenthesized_Substring_Matches

例如,如果你想捕捉括号中的字符串,那么你可以使用这个:

var r=/^\s*[^\[\]]*\[([^\[\]]+)\](?:[^\[\]]*\[([^\[\]]*)\])?\s*$/; 
var m = "inspect [foo - bar] with [errors - 15] ".match(r); 
console.log(m[1], m[2]); 

您可以添加\s*的表达空白修剪过。

+0

你知道的,我相信自己。公认。 – PapaFreud

1

这是我做的,加上a jsFiddle

var src = "inspect [foo - bar] with [errors - 15] " + 
      "create [doodle] " + 
      "force delete [quux]"; 

var regex = /[^\[]+|[^\]]+\]/g; 

document.write(src.match(regex));​ 

输出:

inspect ,[foo - bar], with ,[errors - 15], create ,[doodle], force delete ,[quux] 

,我相信你知道如何修剪空格,请你:)

要解释的正则表达式,这固然看起来有点神秘,它只是说, “把所有的字符都写到[,或者如果你已经在[了,那么请把所有的字符加到],再加上]!”。

1

@akonsu是正确的,它只是一个加括号的事情,就像这样:

var src = "inspect [foo - bar] with [errors - 15]"; 
var regexCapturing = /(\[[a-zA-Z0-9_\- ]+\])/; 
console.log(src.split(regexCapturing)); 

它输出

["inspect ", "[foo - bar]", " with ", "[errors - 15]", ""] 

一些空白修正,跳过去年空字符串和我可以了,好了。谢谢。

(我只是写这作为一个答案,因为我不能使用代码中的注释格式。)

+0

我已经添加了一个正则表达式给我的答案,可以让你避免清理结果数组。 – akonsu