2014-03-01 88 views
0

這是此問題的後續問題I need a better way of counting words in a text area?如何將匹配的單詞添加到數組中?

我正在計算<textarea>正則表達式中的詞。這只是計算單詞,但我需要做的不僅僅是單詞的計數,而是一系列單詞,我可以用array.length表示。我需要一個實際的單詞列表,而不僅僅是一個單詞。

我的想法是把正則表達式檢查器放在for循環中?

這裏是我的代碼:

<body> 
    <textarea rows="14" cols="50" id="text"></textarea> 
    <br/> 
    <br/> 
    <br/> 
    <br/> 
    <button onclick="show()">Analyze</button> 
    <div id="results"></div> 
    <script> 
     function show() { 
      var words; 
      /// GET WORDS 
      var s = document.getElementById("text").value; 
      var word = /[a-zA-Z\d'’-]+/g; 
      var words = s.match(word).length; 
      document.getElementById("results").innerHTML = words; 
     } 
    </script> 
</body> 
+0

'match'已經返回一個數組... – elclanrs

+0

請參見下面的答案,下面的正則表達式是凌亂的。 – alexmac

回答

0

完整的示例:

<body> 

<textarea rows="14" cols="50" id="text"></textarea> 

<br/> 
<br/> 
<br/> 
<br/> 

<button onclick="show()">Analyze</button> 

<div id="results"></div> 
<script> 


    function show() { 
    var words, 
     s = document.getElementById("text").value, 
     word = /[a-zA-Z\d'’-]+/g, 
     // If no matches, returns null, fallback to empty array 
     words = s.match(word)||[], 
     wordCount = words.length; 
    document.getElementById("results").innerHTML = words; 
    } 


</script> 

</body> 
0

所有你所要做的就是改變這一行:var words = s.match(word).length;var words = s.match(word);

現在你有詞作爲詞的陣列...的想法是, s.match(word)本身是一個數組...添加一個.length那裏只返回這個數組的長度。

0

你的正則表達式是不正確的嘗試這個

var words = "this is a word list"; 
var wordm = /(\w+)/g; 
var beer = words.match(wordm); 
console.log (beer); // prints the array 
console.log (beer.length); // prints 5 

的 '\ w +' 匹配任何字樣和 '()' 組他們和G重複它。然後他們被放置在一個數組中。

+0

我刪除了不區分大小寫的開關,因爲您在'\ w'的情況下不需要它。我測試過這段代碼,結果如指定。 – alexmac

相關問題