2016-04-17 16 views
2

我想找出一種有效的方法來爲JavaScript中的給定字符串做一個字數,而不使用正則表達式。字符串字數不使用正則表達式?

一段串下列工作:

function wordCount(str) { 
    return str.split(" ").length; 
} 

console.log(wordCount("howdy there partner")); 

但是 - 給一個字符串時一樣,「這是一個例子」字計數到6而不是4.此外,這種方法不適用於工作空字符串,如「」或「」(分別返回1和2的字數)。

有沒有辦法爲這些實例做一個準確的字數,而不使用正則表達式?

+0

您可以使用trim()從前面和最後一個空格中刪除空格,還可以爲空字符串添加空格。 https://jsfiddle.net/#&togetherjs=RxBlfOSizz – user3045179

+0

通過「不使用正則表達式」,你是指正則表達式作爲拆分的替代方法,或使用正則表達式作爲拆分的參數嗎? –

+0

@torazaburo作爲分裂的參數 – lumian

回答

5

只是filter出空白值:

function wordCount(str) { 
    return str.split(' ').filter(function(val){ return val != '' }).length 
} 
+1

或'filter(布爾)'。另外,用過濾器,你真的需要'trim'嗎?最後,不會'split(/ \ s + /)'更好嗎? –

+0

@torazaburo優秀點,更新了代碼 –

0

雖然這不是100%正確的方法,在這裏它是沒有一個正則表達式:

function wordCount(str) { 
    str = str.trim(); 
    if (str.length === 0) 
    return 0; 
    return str.split(' ').length; 
} 

除非你的控制範圍之外的一些要求強制你不使用正則表達式,你應該使用下面的解決方案給出一個更準確的計數,因爲非正則表達式解決方案只會在空間上分割,並且不能正確處理後續空格/換行符。

function wordCount(str) { 
 
    str = str.trim(); 
 
    if (str.length === 0) 
 
    return 0; 
 
    return str.split(/\s+/g).length; 
 
} 
 

 
document.write(wordCount("howdy there partner")+'<br>'); 
 
document.write(wordCount("howdy  there  partner")+'<br>'); 
 
document.write(wordCount(" random \t test \n string ")+'<br>');

0
function wordCount(str) { 
    return str.trim().split(" ").length; 
} 

console.log(wordCount("howdy there partner")); 
+0

如果單詞被多個空格分隔,這將失敗。 –

2

如果你願意放寬對使用正則表達式的限制,您可以直接做到這一點,而無需使用split

sentence.match(/\w+/g).length 

這意味着匹配任何序列(\w)長度爲一個或多個(+),全局())。它將返回一串匹配,其長度將給出單詞的數量。

爲了防止在沒有單詞串的情況下,和match將返回null,你其實應該寫:

(sentence.match(/\w+/g) || []).length 

這仍然比其他

短的幾個字符
sentence.split(' ').filter(Boolean).length 

萬一你擔心這種事情。

相關問題