Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
中带有特殊字符的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

中带有特殊字符的Javascript正则表达式

中带有特殊字符的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

您好,有人能帮我了解一下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 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;