由括号外的逗号分隔的jQuery / JavaScript

时间:2016-12-10 02:18:44

标签: javascript jquery regex

我正在使用jQuery&的JavaScript !!

我有一个字符串,例如

"cubic-bezier(0.25, 0, 0.25, 1), ease-in, ease-out, linear"

..我想把它拆分成这个数组:

// (the following has no leading or trailing spaces:)

Array[4]
  0: cubic-bezier(0.25, 0, 0.25, 1)
  1: ease-in
  2: ease-out
  3: linear

..但我得到了:

Array[7]
  0: cubic-bezier(0.25
  1: 0
  2: 0.25
  3: 1)
  4: ease-in
  5: ease-out
  6: linear

我尝试过十几种解决方案,但却发现我尝试过的任何方式到目前为止都无法解决。以下是我以前的一些尝试:

var myString = "cubic-bezier(0.25, 0, 0.25, 1), ease-in, ease-out, linear";

myString.split(",(?![^\(\)]*>)");

myString.split('(?:\(.*?\))|(,)');

myString.split(",(?=[^\]]*(?:\[|$))");

myString.split(",(?![^()]*(?:\([^()]*\))?\))");

myString.split('/,(?![^()]*(?:\([^()]*\))?\)/g');

myString.split(",(?=(([^']*'){2})*[^']*$)(?=(([^\"]*\"){2})*[^\"]*$)(?![^()]*\\))");

我熟悉基本的正则表达式规则,例如捕获组和选择器,但我仍然对前瞻或如何解决当前情况感到困惑。

1 个答案:

答案 0 :(得分:5)

匹配任何不在括号内的逗号







var myString = "cubic-bezier(0.25, 0, 0.25, 1), ease-in, ease-out, linear";

var parts    = myString.split(/\,\s?(?![^\(]*\))/);

console.log(parts)
  • /\,\s?(?![^\(]*\))/ 字面匹配字符\,
  • ,匹配任何空格字符。 \s?量词匹配0到1次
  • ?否定前瞻断言正则表达式与下面列表中不存在的单个字符不匹配
  • (?![^\(]*\))量词。零和无限次之间的匹配,尽可能多次
  • [^\(]字面匹配字符\(
  • (字面匹配字符\)