中带有特殊字符的Javascript正则表达式
您好,有人能帮我了解一下regex吗。这是绳子中带有特殊字符的Javascript正则表达式,javascript,regex,Javascript,Regex,您好,有人能帮我了解一下regex吗。这是绳子 ((11A1:I19 + 11A1:K19 + 11A1:L19 + 11A1:I20 + 11A1:K20) - (11A1:N19 + 11A1:N20)) 这是正则表达式 /([0-9a-z])\w+:\w+([0-9-a-z])/g 我想学11A1:I19、11A1:K19等等。。并用值替换它,使字符串看起来像这样(1767+154+1123-(151-17))这是完整的代码 $f.each(function() { var f
((11A1:I19 + 11A1:K19 + 11A1:L19 + 11A1:I20 + 11A1:K20) - (11A1:N19 + 11A1:N20))
这是正则表达式
/([0-9a-z])\w+:\w+([0-9-a-z])/g
我想学11A1:I19、11A1:K19等等。。并用值替换它,使字符串看起来像这样(1767+154+1123-(151-17))这是完整的代码
$f.each(function() {
var formula = $(this).data("formula");
var formula = $f.data("formula");
formula.split(/([0-9a-z])\w+:\w+([0-9-a-z])/g)
.forEach(function(el) {
if (el) {
var hy = el.split(':');
let v = $('[data-sheet="' + hy[0] + '"][data-cell="' + hy[1] + '"]').val();
formula = formula.replace(el, v);
}
});
console.log(formula)
var result = eval(formula);
$f.val(result)
});
我相信您希望这样做(没有使用jquery进行测试) 更新:经过进一步思考,此代码更加紧凑,可能更易于阅读:
$f.each(function() {
var formula = $(this).data("formula");
var formula = $f.data("formula");
var Re=/([0-9a-z]+):([0-9a-z]+)/gi;
var hy;
var replaced=formula;
while ((hy=Re.exec(formula))!=null) {
let v = $('[data-sheet="' + hy[1] + '"][data-cell="' + hy[2] + '"]').val();
replaced = replaced.replace(hy[0], v);
}
console.log(replaced)
var result = eval(replaced);
$f.val(result)
});
出于安全考虑,在公式中替换之前,我还要检查v
是否为有效数字。这将避免评估一些可能是具有可怕后果的有效javascript表达式的代码。您可以使用以下工具进行测试:
if (isNaN(v+0)) continue;
在将
hy[0]
替换为v
之前添加它,您希望提取原始字符串的哪一部分?正则表达式只接受第一个字符([0-9a-z])和最后一个字符。在此字符串中。。。“((11A1:I19+11A1:K19+11A1:L19+11A1:I20+11A1:K20)-(11A1:N19+11A1:N20))”。。我想得到这些:11A1:I19 11A1:K19。。。
if (isNaN(v+0)) continue;