【问题标题】:javascript: result of 'yoyoyoyo'.split('y'), expected to be ['', 'o', '', 'o', '', 'o', '', 'o'], instead saw ['', 'o', 'o', 'o', 'o',]javascript: 'yoyoyoyo'.split('y') 的结果,预期为 ['', 'o', '', 'o', '', 'o', '', 'o'],而不是看到['', 'o', 'o', 'o', 'o',]
【发布时间】:2019-02-22 06:40:57
【问题描述】:

String.split() 的令人困惑的行为:

当 split 函数看到与搜索字符串匹配的字符串/字符时,它会自动将返回的数组中的字符串替换为空白字符串:

'aaaaa'.split('a'); // returns ['', '', '', '', '']

但是当我把它和其他字母放在一起时,神奇地,一对空白字符串消失了:

'abababa'.split('a'); // returns ['', 'b', 'b', 'b', '']

我知道它可以用来分割单词使用

'apples are great'.split(' '); // returns ['apples', 'are', 'great']

但是在单词之间多加一个空格呢?

'apples  are  great'.split(' '); // returns ['apples', '', 'are', '', 'great']

如果我希望 apples are great'.split(' '); 返回 ['apples', '', '', 'are', '', '', 'great'],有哪些选项可以实现?

【问题讨论】:

  • 空白字符串不会消失 - 它们会被您在匹配实例之间引入的内容替换。
  • 你的actual problem 是什么?你的要求对我来说真的没有意义。
  • 提示:split 在考虑不变量时一点也不令人困惑 ∀x:x.split('a').join('a') === x
  • 当 split 函数看到一个字符串/字符与搜索字符串匹配时,它会自动将返回的数组中的字符串替换为一个空白字符串No。它返回上一个匹配(或字符串的开头)和当前匹配(或字符串的结尾)之间的原始字符串的字符。 aaaaa.split('a') 返回 [ "", "", "", "", "", "" ] 的原因(6 个字符串,而不是您在问题中所说的 5 个)是因为每次匹配之间有零个字符,因此它返回 6 个零长度字符串。

标签: javascript arrays node.js split


【解决方案1】:

您可以在此处参考 MDN 文档以了解 split() - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split:

找到后,从字符串中删除分隔符, 子字符串在数组中返回。如果没有找到分隔符 或被省略,数组包含一个元素,由 整个字符串。如果 separator 为空字符串,则转换 str 到一个字符数组。如果分隔符出现在开头 或字符串的结尾,或两者,数组的开始,结束,或两者 分别以空字符串开始和结束。因此,如果 该字符串仅包含一个分隔符实例,即 数组由两个空字符串组成。

【讨论】:

    【解决方案2】:

    你可以做这样的事情。在哪里匹配所有单词和所有空格,然后映射它们。如果项目是空格,则使用 trim 将返回空字符串。

    const res = 'apples  are  great'.match(/\w+|\s/g).map(item=>item.trim());
    
    console.log(res);

    【讨论】:

    • 这也是我的第一次拍摄,但 OP 实际上 想要 他的结果中的空字符串,而不是避免它们。他的问题是他太想要一个空字符串了。
    • 不起作用,仍然返回相同的['apples', 'are', 'great']
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多