正则表达式匹配所有`,`不在\ [\]

时间:2015-08-31 07:46:12

标签: javascript regex

以下是我必须匹配的示例字符串:

   var sampleStr = "aaa[bbb=55,zzz=ddd],#ddd[ppp=33,kk=77,rr=fff],tt,ff";

我需要编写匹配所有不在, [

内的]个字符的正则表达式

所以在我的示例字符串中,我应该收到下一个,字符:

   - `,` before `#ddd`
   - `,` before `tt`
   - `,` before `ff`

它应忽略下一个,

  - `,` before `zzz`
  - `,` before `kk`
  - `,` before `rr`

实际上我不知道如何忽略,内的[...]。 任何进步的重大举措

3 个答案:

答案 0 :(得分:3)

如果您可以认为[]内的部分不包含嵌套[],并且[]是平衡的:

var out = content.split(/,(?![^\[\]]*\])/);

(?![^\[\]]*\])是一个负面的预测,用于启发式检查我们不在[]内。只要我们在][以外的字符消费时我们不会遇到任何],那么我们就在[]之外。

上面的代码会将文字沿着括号,之外的逗号[]拆分并返回令牌。

答案 1 :(得分:1)

避免用方括号括起来的逗号的一种方法是首先匹配方括号。替换示例:

var result = sampleStr.replace(/([^\[,]*(?:\[[^\]]*\][^\[,]*)*),/g, '$1#');

其他示例如果要拆分:

var result = sampleStr.match(/(?=[^,])[^\[,]*(?:\[[^\]]*\][^\[,]*)*/g);

这些方法的优点是你不需要解析所有的字符串,直到最后为每个逗号预测。

答案 2 :(得分:1)

这个正则表达式应该可行

,(?![^\[]*?\])

请参阅:DEMO

<强>解释

,是我们的目标逗号,

(?![^\[]*?\])使用否定前瞻来保证]之后没有,,这里有一个技巧,而不是使用.*我们使用[^\[]*来阻止正则表达式匹配模式[...]而不是..]