嵌套if的javascript问题

时间:2015-02-16 21:33:57

标签: javascript string if-statement nested match

我正在尝试输入字符串查询,并使用string.match选择必要的信息来执行指标转换。经过大量的实验,我不断得到这个作为输出: “空白厘米有0英寸”

我想知道if语句中的逻辑是否有问题。以下是一个例子:

    var metric = string.match(/centimeters|liters|grams/);
    var english = string.match(/inches|quarts|pounds/);
    var ind = string.indexOf(metric);
    var ind2 = string.indexOf(english);

   if (string.match(/centimeters/) && string.match(/inches/)){
        if (ind < ind2) {
            var string = document.getElementById("box1").value;
            var num = string.match(/\d+$/);
            parseInt(num);
            var conNum = num * 2.54;
            document.getElementById("unit").innerHTML = "There are " + conNum +  " centimeters in " + num + " inches.";
        }
        if (ind2 < ind) {
            var string = document.getElementById("box1").value;
            var num = string.match(/\d+$/);
            parseInt(num);
            var conNum = num/2.54;
            document.getElementById("unit").innerHTML = "There are " +           conNum +  " inches in " + num + " centimeters.";
            }

2 个答案:

答案 0 :(得分:0)

我实际上并不是100%确定你想要什么,你还没知道最初的string来自哪里,所以我假设了一些东西:

<强> HTML

<input type="text" id="box1" value="10" />
<div id="unit"></div>

<强> JAVASCRIPT

    var string = 'centimeters to inches'

    var metric = string.match(/centimeters|liters|grams/);
    var english = string.match(/inches|quarts|pounds/);
    var ind = string.indexOf(metric);
    var ind2 = string.indexOf(english);

   if (string.match(/centimeters/) && string.match(/inches/)){
        if (ind < ind2) {
            var string = document.getElementById("box1").value;
            var num = string.match(/\d+$/);
            parseInt(num);
            var conNum = num * 2.54;
            document.getElementById("unit").innerHTML = "There are " + conNum +  " centimeters in " + num + " inches.";
        }
        if (ind2 < ind) {
            var string = document.getElementById("box1").value;
            var num = string.match(/\d+$/);
            parseInt(num);
            var conNum = num/2.54;
            document.getElementById("unit").innerHTML = "There are " + conNum +  " inches in " + num + " centimeters.";
            }
   }

http://jsfiddle.net/7fw5ubvo/1/

答案 1 :(得分:0)

注意事项:

  • .match()方法返回一个数组,而不是一个字符串。您的代码可以正常运行,因为您的正则表达式不包含任何组,但无论如何我都要解决此问题。

  • 通话:

    parseInt(num);
    

    对任何事情都没有影响。但是,仅此一点也不会受到影响,因为您将num*/运算符一起使用,并且无论如何都会将字符串(再次来自数组)转换为数字。但它不会强制该值为整数。

  • 您的数字匹配器正则表达式坚持输入字符串的数字部分位于字符串的末尾。这就是$的含义。因此,找到数字的唯一表达式将是inches centimeters 5等字符串。