RegEx:拆分行","

时间:2014-04-25 12:46:29

标签: javascript regex regular-language

如何转换

"one,cubic-bezier(0, 0, 1, 1), cubic-bezier(0, 0, 1, 1), linear"

["one", "cubic-bezier(0, 0, 1, 1)", "cubic-bezier(0, 0, 1, 1)", "linear"]

如何?

的JavaScript。

这不一样。 Becouse引号(左侧和右侧),这里( - 左侧) - 右侧。

不要在JS工作。

'ease,cubic-bezier(0, 0, 1, 1), linear,2,3'.split(/,(?=[^()]*((|$))/gi); 

结果:

ease,(,cubic-bezier(0, 0, 1, 1),, linear,,2,,3

2 个答案:

答案 0 :(得分:2)

假设parens不能嵌套(在这种情况下你不能使用JS正则表达式)。

试试这个:

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

快速分解:

,          # match a comma                           [1]
(?!        # start negative look ahead               [2]
  [^()]*   #   match zero or more non-parens chars   [3]
  \)       #   match the closing paren               [4]
)          # stop look ahead

用简单的英语写成:

  

匹配逗号[1],只有在没有逗号和结束语[3] 之间没有任何关键字的情况下才会提前关闭[4] [2]

答案 1 :(得分:1)

根据您的示例:

var str = "one,cubic-bezier(0, 0, 1, 1), cubic-bezier(0, 0, 1, 1), linear";
var arr = str.split(/,\s*(?!\s*\d)/);
console.log(arr.toSource());

// result
// ["one", "cubic-bezier(0, 0, 1, 1)", "cubic-bezier(0, 0, 1, 1)", "linear"]

以下是fiddle