Javascript,Regex - 我需要抓住括号中包含的字符串的每个部分

时间:2010-06-27 08:27:40

标签: javascript regex

这就是我需要的正确顺序:

  1. 方括号中包含的字符串的每个部分的内容(每个部分必须在原始字符串的其余部分之后)必须被提取并存储,并且原始字符串在没有它们的情况下返回。
  2. 如果在给定的提取部分的开头有一个识别的字符串后面跟一个冒号,那么我需要识别并删除它。
  3. 对于剩下的内容(以逗号分隔),我需要将其转储到数组中。
  4. 不要尝试解析嵌套括号。
  5. 这样做的好方法是什么?

    编辑:以下是字符串示例:

      

    嗨,我是一个字符串[这个:是,如何] [它:工作,但是,那里] [可能是括号,部分,没有,冒号] [[嵌套部分应该被忽略?]]

    编辑:以下是结果:

      

    提取后:'嗨,我是一个字符串'

         

    标识为'this'的数组:['是','how']

         

    标识为'it'的数组:['有效','但','有']

         

    没有标签的数组:['可能由括号','部分','没有','冒号']

         

    没有标签的数组:[]

1 个答案:

答案 0 :(得分: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, '');令牌 - 此代码会将其捕获为普通组。