2014-01-24 57 views
0

我有正則表達式的問題,它就像我試圖計算文本區域中的單詞數量,但我沒有得到期望的輸出。主要的問題是,它不計算數字,例如「Hello world 123」它只計算2,而「123」它根本不計算。我的正則表達式是response.trim().replace(/\b[\s,-:;'"_]*\b/gi, ' ').split(' ');如何使用正則表達式計算textarea中的單詞和數字?

+1

什麼是你想要的目的。如果只計算字段中的字符,則可以使用document.getElementById('your_id')。value。長度' – RichieAHB

+0

'php'是這裏的必要標籤嗎?你需要JavaScript的答案嗎? – MichaelRushton

+0

@MichaelRushton是的,你可以 –

回答

1

您應該使用/\b|\d+/gi來搜索字邊界數字,然後計算數組中元素的數量。

var array = response.trim().match(/\b|\d+/gi); 
var count = array.length; 
+2

'\ d \ d * === \ d +' – Tibos

+0

@Tibos好點! –

+0

這工作,但我想刪除特殊字符,如:,?和所有,我不希望他們被算作。 –

0

正如您所用php標記這個我假設PHP答案是可以接受的,在這種情況下,你並不需要一個正則表達式。你可以只用str_word_count

echo str_word_count("Hello world 123!", 0, '0..9'); // 3 

注意第三個參數,它允許您指定其他字符,組成一個字。作爲默認設置,不包括數字,因此在此添加。

或者您可以使用preg_match_all

preg_match_all('/\b[a-z\d]+\b/i', $string); 

這將只計算字母和數字作爲文字字符。

0

您的解決方案几乎是完美的,但這裏有兩個問題:

  1. 取代「至少一」字分隔符發生(+),而不是任何(*
  2. 你有,-;字符在你的角色等級([...])範圍內,不幸的是包括所有的數字。當你想匹配-(破折號)時,總是在角色等級的開頭!

所以修正的正則表達式:/\b[-\s,:;'"_]+\b/gi

編輯:如果您需要在每個非字母數字字符,使用[\W_]

+0

對不起,先生,它不工作。它仍然計數,。 /? (特殊字符) –

+0

@niku你是對的,我把你的解決方案作爲一個起點,但在我的回答末尾添加了一個非alpahn數字匹配模式 – aorcsik

0

匹配您可以使用

array = response.trim().match(/\w+/g); 
count = array.length; 

在你的數組只有字(字母數字字符串)將被存儲。

爲了記錄在案,\w是短期的[a-zA-Z0-9],這意味着它不會趕上正確的話有特殊字符,像journée,但它會返回6 I'd like 1 cup...plz!

0

看看這個演示。

DEMO

您可以使用:response.replace(/['?:_!'"@#$&%\^*()\\\/.-]/g,"").split(/[ \n\r]/);

+0

''?:'不是唯一現有的標點符號。 – Robin

+0

是的,在他的評論中,他只給出這3個,這就是爲什麼...... –

+0

@SujithPS我想逃避特殊字符。 –

相關問題