使用正则表达式

时间:2017-01-07 01:24:55

标签: javascript regex

我想用逗号分隔字符串,但不是当它们在括号内时。

例如:

"[1, '15', [false]], [[], 'sup']"

会分成

[
  "[1, '15', [false]]",
  "[[], 'sup']"
]

我已尝试/\,(?=(.*\[.*\])*.*\]{1})/为我的正则表达式,我的逻辑是匹配逗号,后面跟着偶数个' []'中间和外面的任何字符后跟一个']'。

3 个答案:

答案 0 :(得分:2)

如果预期结果是两个字符串,无论字符串是否可以作为javascript对象或有效JSON进行解析,您都可以使用Array.prototype.reduce()String.prototype.split(),{{1 }}

String.prototype.replace()

答案 1 :(得分:1)

Regexp并不适合这种涉及嵌套的情况。您可能想要编写一个小解析器:



function parse(str) {
  let result = [], item = '', depth = 0;

  function push() { if (item) result.push(item); item = ''; }

  for (let i = 0, c; c = str[i], i < str.length; i++) {
    if (!depth && c === ',') push();
    else {
      item += c;
      if (c === '[') depth++;
      if (c === ']') depth--;
    }
  }
  
  push();
  return result;
}
        
console.log(parse("[1, '15', [false]], [[], 'sup']"));
&#13;
&#13;
&#13;

您可能需要调整它以处理逗号,不平衡方括号等周围的空格。

答案 2 :(得分:0)

如果字符串是正确的类似数组的字符串......也许这也值得一试:

 var regex = /(\[.*?\]\])|(\[\[.*?\]$)|(\[(.*?)\])|(,)/gm;

&#13;
&#13;
var regex = /(\[.*?\]\])|(\[\[.*?\]$)|(\[(.*?)\])|(,)/gm;
str = "[1, '15', [false]], [[], 'sup']";
/*str="[1, [30] [false][,]], [[]false, 'sup'[]]";
str="[[] []], [1,4,5[8]]";
str="[[1,2,3],[3,6,7]],[[],566,[]]";
str="[[],[]],['duh,[],'buh',[]]";

str="[1,2,3],[5,'ggg','h']"*/


arr=[];
while ((matches = regex.exec(str)) !== null) {
if(matches[0]!==',')
arr.push(matches[0]);

  
}

console.log(arr);
&#13;
&#13;
&#13;

所以,基本上,匹配替代组,循环结果,保持非逗号匹配。在某些情况下,这可能会失败......但是,应该进行更多测试。