我正在尝试拆分并提取格式为linear-gradient(...)
的所有字符串,该字符串可能包含多个匹配项,例如
linear-gradient(...), linear-gradient(...)
我的正则表达式只适用于一次,但我不能让它在第一次出现后不贪婪。任何帮助将不胜感激。
适用于单次事件的正则表达式
/.*gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/g
要拆分的字符串
linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgb(0, 0, 0) 100%), linear-gradient(to bottom, rgb(177, 186, 206) 0%, rgb(92, 158, 79) 50%, rgb(135, 218, 232) 100%)
javascript
var aGradient = [];
var gradientString = "linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgb(0, 0, 0) 100%), linear-gradient(to bottom, rgb(177, 186, 206) 0%, rgb(92, 158, 79) 50%, rgb(135, 218, 232) 100%)";
var regex = /.*gradient\s*\(((?:\([^\)]*\)|[^\)\(]*)*)\)/g;
var match;
while (match = regex.exec(gradientString)) {
aGradient.push(match[0]);
console.log(match[0]);
}

答案 0 :(得分:1)
模式开头的.*
部分与除了换行符之外的任何0+字符匹配尽可能多的。这意味着,你只能在一条线上获得最后一场比赛。
您似乎只需要匹配-gradient
前面的任何字词。将.*
替换为\w+-
:
\w+-gradient\s*\(((?:\([^()]*\)|[^()]*)*)\)
^^^^
请参阅regex demo。 \w+
匹配1个或多个字母/数字/ _
。
如果您知道可以存在的值,请使用交替组:
(?:linear|radial)-gradient\s*\(((?:\([^()]*\)|[^()]*)*)\)
^^^^^^^^^^^^^^^^^
(?:linear|radial)
组将匹配linear
或radial
。
注意:您不需要在字符类中转义(
和)
。