2012-02-22 35 views
8

我需要一个标记器给出一个字符串与单词之间的任意空格将创建一个没有空子字符串的单词数组。在Javascript中使用空格分隔字符串?

例如,给定一个字符串:

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

我用:

str2.split(" ") 

这也返回空的子串:

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

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

回答

15

你可能甚至都不需要过滤,只用这则表达式分割:

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

题外话:什么意思'在正则表达式\ B'? – 2012-02-22 19:55:40

+3

匹配单词边界,如空格,换行符,标点符号或字符串尾(https://developer.mozilla.org/zh/JavaScript/Guide/Regular_Expressions)。可能不是完美的正则表达式,但是对于这个例子,它可以工作。 – Daff 2012-02-22 19:58:04

+0

@Mustafa是的,我知道。但这只是一种好奇心。 – 2012-02-23 01:10:10

7

采用分体式之前,您应该修剪的字符串。

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

我建议.match

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

这个匹配单词边界之间的话,那么所有的空格不匹配,因此不包括在生成的数组英寸

+0

这个效果甚至更好: >>> str2 “Humpty Dumpty轻蔑地笑了一下当然你不会 - 直到我告诉你我的意思是一个很好的为你敲倒论点!“ 使用: str3 = str2。匹配(/ \ B \ W + \ B/G); 结果于: >>> str3 [“Humpty”,“Dumpty”,“smiled”,“contemptuously”,“Of”,“course”,“you”,“dont”,“until”我“,”你“,”我“,”意思“,”theres“,”a“,”nice“,”knock“,”down“,”argument“,”for“ ] 所以w + matchs也是“ - ” – dokondr 2012-02-22 20:39:22

+1

@dokondr:你算作单词人物?如果它是除空格以外的所有内容,则可能只需使用'[^]'而不是'\ w'。 – pimvdb 2012-02-22 20:47:28

7
str.match(/\S+/g) 

返回非空序列["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said."]列表

str.match(/\w+/g) 

返回的所有单词的列表(请注意这包括在点“之说。”):对["I", "dont", "know", "what", "you", "mean", "by", "glory", "Alice", "said"]

文档match()

+1

很好的答案。对于别人的引用,'/ S + /'匹配不是**空白的字符组,而'/ w + /'匹配**字母数字+下划线的字符组。这就是为什么期间('.')字符匹配一个而不是另一个。 – 2013-01-11 23:01:34

0

我认为空的子字符串发生是因为有多个空格可以在for循环中使用replace()来替换多个wh伊特 - 空间与单一的白色空间,然后分割()使用单一的白色空间这样的拆分方案:

// 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(" ");

相关问题