Javascript字符串操作和范围转换

时间:2017-02-09 22:39:01

标签: javascript arrays string data-manipulation

我有一个这样的字符串(必须采用这种格式):

var string = "[0] No new notifications | [1,] Some new notifications"

我想得到"没有新通知"如果变量为0且该变量为1或更大,则显示"一些新通知"。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

在仔细检查了您正在寻找的内容之后,我提出了一个解决方案,该解决方案将读入您传递的规则,并基本上将其转换为您的程序将遵循的逻辑。以下是它如何工作的演示:



var myVar = 3;
var myStr = '[0] No new notifications | [1,4] Some new notifications | [5,] Several new notifications';
var notificationRules = getRules(myStr);

function getRules(rulesString) {
  return rulesString.split(' | ').map(function(rule) {
    var startValue, endValue;
    var values = rule.match(/\[\d*,?\d*\]/g)[0];
    values = values.replace(/\[|\]/g, "").split(",");
    startValue = values[0];
    endValue = +values[1] === 0 ? Infinity : values[1];
    return {
      startValue: Number(startValue),
      endValue: endValue != undefined ? Number(endValue) : undefined,
      message: rule.replace(/\[\d*,?\d*\]/g, "").trim()
    };
  });
}

function getMessage(myVar, rules) {
  var message = "No rule match!";
  rules.some(function(rule) {
    if (myVar === rule.startValue) {
      message = rule.message;
      return true;
    } else if (myVar >= rule.startValue && myVar <= rule.endValue) {
      message = rule.message;
    }
  });
  return message;
}

console.log(getMessage(0, notificationRules));
console.log(getMessage(2, notificationRules));
console.log(getMessage(5, notificationRules));
console.log(getMessage(100, notificationRules));
console.log(getMessage(-1, notificationRules));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

var somevar = 3;
var yourString = '[0] No new notifications | [1,] Some new notifications';
var notification = yourString .split(' | ');
var message=(somevar == 0 ? notification[0].split('] ')[1] : notification[1].split('] ')[1]);

var消息有你需要的输出。

答案 2 :(得分:1)

这是ISO 31-11字符串的通用处理器。它采用ISO 31-11字符串和数值,然后返回相应的字符串或未定义。这是一个fiddle

function processISO31_11(rangeGuide, n) {
  var separator = /\[(\d+)(,)?(\d+)?\]\s?(.+)/;
  var rangeGuides = rangeGuide.split('|');
  var guideCount = rangeGuides.length;
  for (var guide = 0; guide < guideCount; guide++) {
    var elements = separator.exec(rangeGuides[guide]);
    if (elements != null) {
      if (n < parseFloat(elements[1])) {
        return; // return undefined indicating failure to match any range
      }
      if (n == parseFloat(elements[1])) {
        return elements[4];
      }
        if (elements[2] === "," && (typeof elements[3] === "undefined" || n <= parseFloat(elements[3]))) {
        return elements[4];
      }
    }
  }
}

答案 3 :(得分:0)

使用String.prototype.split()String.prototype.match()String.prototype.slice()函数的复杂解决方案:

&#13;
&#13;
var configStr = '[0] No new notifications | [1,] Some new notifications',
    getNotifyMessage = function (config, num) {
        var num = Number(num),
            items = config.split('|'), 
            len = items.length, parts;

        while (len--) {
            parts = items[len].match(/\[(\d+,?)\]\s([\w ]+)(?=\||$)/i);
            if (Number(parts[1]) === num) {
                return parts[2];
            }
            if (parts[1].slice(-1) === ',' && Number(parts[1].slice(0,-1)) <= num) {
                return parts[2];  
            }
        }

        return '';
  };

console.log(getNotifyMessage(configStr, 1));
console.log(getNotifyMessage(configStr, 0));
console.log(getNotifyMessage(configStr, 3));
&#13;
&#13;
&#13;