【问题标题】:Split a string using whitespace in Javascript?在Javascript中使用空格拆分字符串?
【发布时间】:2012-02-22 19:50:03
【问题描述】:

我需要一个分词器,它给定一个在单词之间带有任意空格的字符串,将创建一个没有空子字符串的单词数组。

例如,给定一个字符串:

" I dont know what you mean by glory Alice said."

我用:

str2.split(" ")

这也返回空子字符串:

["", "I", "dont", "know", "what", "you", "mean", "by", "glory", "", "Alice", "said."]

如何过滤掉数组中的空字符串?

【问题讨论】:

    标签: javascript tokenize


    【解决方案1】:

    您可能甚至不需要过滤,只需使用此正则表达式进行拆分:

    "   I dont know what you mean by glory Alice said.".split(/\b\s+/)
    

    【讨论】:

    • 离题:正则表达式中的\b 是什么意思?
    • 匹配单词边界,例如空格、换行符、标点符号或字符串结尾 (developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions)。可能不是完美的正则表达式,但对于那个例子来说它可以工作。
    • @Mustafa 是的,我知道。但这只是一种好奇心。
    • 我喜欢正则表达式,但如何解释“,”(逗号,空格)
    【解决方案2】:
     str.match(/\S+/g) 
    

    返回非空格序列["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said."] 的列表(注意这包括“said”中的点)

     str.match(/\w+/g) 
    

    返回所有单词的列表:["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said"]

    match() 上的文档

    【讨论】:

    • 好答案。供其他人参考,/S+/ 匹配空格的字符组,而/w+/匹配字母数字+下划线的字符组。这就是为什么句点 (.) 字符在一个匹配但另一个不匹配的原因。
    【解决方案3】:

    你应该在使用 split 之前修剪字符串。

    var str = " I dont know what you mean by glory Alice said."
    var trimmed = str.replace(/^\s+|\s+$/g, '');
    trimmed = str.split(" ")
    

    【讨论】:

      【解决方案4】:

      我推荐.match

      str.match(/\b\w+\b/g);
      

      这匹配单词边界之间的单词,因此所有空格都不匹配,因此不包含在结果数组中。

      【讨论】:

      • 这个效果更好:>>> str2 "Humpty Dumpty 轻蔑地笑了笑,当然你不会——直到我告诉你我的意思是你有一个很好的击倒论据!" 使用:str3 = str2。匹配(/\b\w+\b/g);结果: >>> str3 ["Humpty", "Dumpty", "smiled", "contemptuously", "Of", "course", "you", "dont", "till", "I", "tell "、"you"、"I"、"meant"、"theres"、"a"、"nice"、"knock"、"down"、"argument"、"for"、"you"] 所以 w+ 也匹配“——”
      • @dokondr:你把什么算作单词字符?如果是除空格之外的所有内容,您可能只想使用[^ ] 而不是\w
      【解决方案5】:
      【解决方案6】:

      我认为空子字符串的发生是因为有多个空格,您可以在 for 循环中使用 replace() 将多个空格替换为单个空格,然后 split() 使用像这样的单个空格:

      // getting full program from div
      var program = document.getElementById("ans").textContent;
      //removing multiple spaces
      var res = program.replace("  ", " ");
      for (i = 0; i <= program.length; i++) {
        var res = res.replace("  ", " ");
      }
      // spliting each word using space as saperator
      var result = res.split(" ");

      【讨论】:

        【解决方案7】:

        这就是我们所需要的:

        str.trim().split(' ')
        

        【讨论】:

          猜你喜欢
          • 2017-06-18
          • 2015-11-26
          • 1970-01-01
          • 2023-03-28
          • 2017-07-15
          • 2014-02-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多