【问题标题】:Node js Separate String into arraysNode js将字符串分隔成数组
【发布时间】:2015-06-08 18:34:19
【问题描述】:

得到一个像这样的字符串

-FirstName (Some Random Name) -LastName (Some Random Last Name) -Age 30

我正在寻找从该字符串中提取名字姓氏和年龄的最佳和最简单的方法。所以我可以将这些数据存储在数据库中。

标签的顺序可以是随机的。

【问题讨论】:

  • 我相信最快的方法是使用.indexOf()函数。找到第一个左括号和右括号的索引。将字符串切成新的。对第二个执行以下操作。
  • 嗨史蒂夫,感谢您的评论。忘了说括号只是为了可视化。字符串看起来像这样 -FirstName Michell -LastName Forke -Age 30

标签: javascript node.js extract


【解决方案1】:

更新答案

我记得 indexOf 比正则表达式更快。所以这就是你问题的答案:

var a, i, flags, result, flag, entry, start, end;

a = "-FirstName Some Random Name -LastName Some Random Last Name -Age 30"

flags = ["-FirstName", "-LastName", "-Age"];
result = [];
for (i = 0; i < flags.length; i++) {
    flag = flags[i];
    entry = a.search(flag);
    lookup_start = entry + flag.length;

    end = a.indexOf("-", lookup_start);
    end = (end == -1) ? a.length : end;
    result.push(a.slice(lookup_start, end).trim())
}

console.log(a);
console.log(result);

现在您将拥有一个映射 - flags[i] -&gt; result[i]。因此,您可以轻松地构建一个对象。

【讨论】:

    【解决方案2】:

    使用正则表达式是最简单的。问题是名称中可能有破折号和空格。所以我会尝试这样的事情:

    var tags = []
    
    '-FirstName Some Random Name -LastName Some Random Last Name -Age 30'.replace(/\-([\w]{3,9})\s?((\w|\s|(\w\-))+)?\s?/gm, function () {
      tags.push(arguments)
      return ''
    })
    
    console.log(tags)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2019-08-23
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      相关资源
      最近更新 更多