将长表达式字符串拆分为单个表达式数组的正则表达式

Regex to split a long expressions string into an array of individual expressions

我有一个来自 Angular [ngClass] 指令的表达式字符串,其中包含多个表达式,它们的相应键用逗号分隔。

'background_orange':row.columnname.split(',')[4] == 1,'red:color':test==='testname','yellow:color':test==='testname'

当我尝试使用 .split(',') 函数将上面的表达式字符串拆分为单个表达式的数组时,它在各个表达式之间拆分。

代码:

var temp = "'background_orange':row.columnname.split(',')[4] == 1,'red:color':test==='testname','yellow:color':test==='testname'";

var result = temp.split(',');
console.log(result);

输出:

["'background_orange':row.columnname.split('", "')[4] == 1", "'red:color':test==='testname'", "'yellow:color':test==='testname'"]

预期结果:

["'background_orange':row.columnname.split(',')[4] == 1", "'red:color':test==='testname'", "'yellow:color':test==='testname'"]

我尝试构建正则表达式来提取单个表达式,但只能使用以下正则表达式提取表达式键

正则表达式:

'\b(.+?)':

提取上述预期模式的正则表达式是什么

((?:.*):(?:.*))\,((?:.*):(?:.*))\,((?:.*):(?:.*))

如果格式是静态的,可以使用上面的正则表达式格式。

以下正则表达式在 , 处拆分您的字符串,但忽略 "':

之间的所有 , 内部字符串

var temp = "'background_orange':row.columnname.split(',')[4] == 1,'red:color':test==='testname','yellow:color':test==='testname'";
var r = /(('[^']*')|("[^"]*")|[^,])+/g

var result = temp.match(r)
console.log(result);

每个匹配项都是一个非空序列:

  1. ('[^']*') 个字母不在 ' '
  2. 之间
  3. ("[^"]*") 同上 "
  4. [^,] 不是 ,
  5. 的字符