LESS / javascript:将regexp对象转换为整数(计算)
LESS / javascript: convert regexp object to integer (calculation)
我想将背景位置转换为供应商前缀梯度,因此我使用一个简单的公式90 - (@degree)
,根据这个例子,它应该是90 - (135) = -45
。
重要的部分是.replace(/('d*)?deg/g, 90 - '$1' + 'deg')
,我尝试了不同的功能,但无论如何,输出总是以NaN结束:方法(1美元)parseFloat(1美元)- eval(90 - '$1')数量(1美元)
如果我用'135'
或任何其他数字代替'$1'
,它可以很好地工作。
@w3c: true; // valid w3c syntax
@webkit: true; // Google Chrome, Safari, iOS
@moz: true; // Mozilla Firefox
@ms: true; // Internet Explorer
@o: true; // Opera
@default-background-image: linear-gradient(135deg, blue, red), linear-gradient(150deg, green, orange);
.background-image (@arguments: @default-background-image;) {
.result (...) when (@webkit = true) {
background-image: ~`"@{arguments}"
.replace(/['[']]/g,'')
.replace("linear-gradient","-webkit-linear-gradient")
.replace(/('d*)?deg/g, 90 - '$1' + 'deg')`;
}
.result (...) when (@moz = true) {
background-image: ~`"@{arguments}"
.replace(/['[']]/g,'')
.replace("linear-gradient","-moz-linear-gradient")
.replace(/('d*)?deg/g, 90 - '$1' + 'deg')`;
}
.result (...) when (@ms = true) {
background-image: ~`"@{arguments}"
.replace(/['[']]/g,'')
.replace("linear-gradient","-ms-linear-gradient")
.replace(/('d*)?deg/g, 90 - '$1' + 'deg')`;
}
.result (...) when (@o = true) {
background-image: ~`"@{arguments}"
.replace(/['[']]/g,'')
.replace("linear-gradient","-o-linear-gradient")
.replace(/('d*)?deg/g, 90 - '$1' + 'deg')`;
}
.result (...) when (@w3c = true) {
background-image: @arguments;
}
.result (@arguments);
}
您需要替换函数而不是表达式(它被计算为字符串,导致问题):
str.replace(/('d*)deg/g, function($0, $1) {
return (90 - parseInt($1)) + 'deg';
});
我已经删除了?
,因为'd*
已经满足了这一点。另外,我会使用'd+
,因为空数字没有意义。
var str = '@default-background-image: linear-gradient(135deg, blue, red), linear-gradient(150deg, green, orange);';
str.replace(/('d*)deg/g, function($0, $1) {
return (90 - parseInt($1)) + 'deg';
});
输出:"@default-background-image: linear-gradient(-45deg, blue, red), linear-gradient(-60deg, green, orange);"
如果使用
.replace(/('d+)(?=deg)/g, 90 - parseInt($1))
where $1
not引号?
似乎java脚本将引用的$1解释为"不是数字"的字符串
我还将表达式转换为使用非捕获前向查找,这将消除插入重新插入deg
的需要。
另一个问题是,您的regex匹配'd*?deg
,这是字符串deg
之前的零或多个数字,我用'd+
取代了'd*?
以匹配1个或多个数字。
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 使用D3.js计算带有字母间距的文本长度
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 正则表达式只允许 x 个整数
- 计算阶乘超过了Javascript中的最大整数限制
- JavaScript:计算字符串中特定整数的实例
- Javascript将从Flask发送的字符串计算为整数
- 将字符串转换为整数并计算
- 计算范围内的整数
- Javascript函数计算整数的阶乘
- LESS / javascript:将regexp对象转换为整数(计算)
- 如何在一个大的输入整数中计算重复数字
- 计算字符串中整数的个数
- Javascript获取Jquery的datepicker值并转换为整数进行计算
- JavaScript根据实数和整数计算哈希代码
- 传递带连字符的字符串将被计算为整数(减法!)js