2010-06-27 62 views
2

字符串的每个部分下面是我需要什么,我猜一定是正确的顺序:JavaScript中,正则表达式 - 我要抓住包含在括号

  1. 字符串的每个部分的内容放在方括号(每一个必须跟在原始字符串的其余部分后面)需要被提取出来并存储起来,而没有它们的原始字符串被返回。
  2. 如果在给定的提取节的开始处有一个识别的字符串后跟一个冒号,那么我需要识别并删除它。
  3. 对于剩下的(逗号分隔),我需要将它转储到数组中。
  4. 不要尝试分析嵌套括号。

这样做的好方法是什么?

编辑:下面是一个字符串的例子:

嗨,我是一个字符串[本:是,如何] [它:工作,但是,有] [可​​能是支架,配件但,冒号] [[嵌套的区段应该被忽略?]

编辑:这里有可能是什么结果:

一压脚提升提取:“嗨,我是一个字符串”认定为“本”

阵:[“是”,“如何”]

阵列认定为“是”:“作品”,“但”, '有']

阵列没有标签识别:[ '由支架威力', '部件', '无', '冒号']

阵列没有标签识别:[]

+1

你能举一个例子字符串和相应的结果吗? – 2010-06-27 08:31:12

+0

这是如何工作的? – Hamster 2010-06-27 08:48:44

+0

快速注释 - 您可能*试图分析嵌套括号。如果你有'[token:val1,[ignore] val2]'?即使在你的例子中,嵌套的标记也会带来一些麻烦。 – Kobi 2010-06-27 09:14:27

回答

3
var results = []; 
s = s.replace(/\[+(?:(\w+):)?(.*?)\]+/g, 
     function(g0, g1, g2){ 
     results.push([g1, g2.split(',')]); 
     return ""; 
     }); 

给出结果:

>> results = 
    [["this", [" is", " how"]], 
    ["it", [" works", " but", " there"]], 
    ["", ["might be bracket", " parts", " without", " colons "]], 
    ["", ["nested sections should be ignored?"]] 
    ] 

>> s = "hi, i'm a string  " 

请注意它会在令牌之间留下空格。此外,您可以在早期通过拨打s = s.replace(/\[\[.*?\]\]/g, '');删除[[]]代币 - 此代码将其捕获为正常组。

+0

。谢谢。 – Hamster 2010-06-27 09:20:35

+0

是的,你会想要使用正则表达式,比如'.split(/ \ s *,\ s * /)'。一个字符串不能以相同的方式工作,'/ g'在'split'中是不需要的(但是不能用':'') – Kobi 2010-06-27 09:22:37

+0

啊,/ \ s *,\ s * /。我仍然不完全清楚g/g究竟是什么。 – Hamster 2010-06-27 09:24:10