Dizideki kelimeleri saymak


93

Bir metindeki kelimeleri şu şekilde saymaya çalışıyordum:

function WordCount(str) {
  var totalSoFar = 0;
  for (var i = 0; i < WordCount.length; i++)
    if (str(i) === " ") { // if a space is found in str
      totalSoFar = +1; // add 1 to total so far
  }
  totalsoFar += 1; // add 1 to totalsoFar to account for extra space since 1 space = 2 words
}

console.log(WordCount("Random String"));

Sanırım bunu oldukça iyi anladım, ancak ififadenin yanlış olduğunu düşünüyorum . str(i)Boşluk içerip içermediğini kontrol eden ve 1 ekleyen kısım .

Düzenle:

Bunu çok daha az kodla yapabileceğimi (Blender sayesinde) öğrendim:

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

console.log(WordCount("hello world"));

Daha str.split(' ').lengthkolay bir yöntem olmaz mıydı? jsfiddle.net/j08691/zUuzd
j08691

Veya str.split(' ')0 uzunlukta olmayanları saymak mı?
Katie Kilian

8
string.split ('') .length çalışmıyor. Boşluklar her zaman kelime sınırları değildir! Ya iki kelime arasında birden fazla boşluk varsa? Ne dersin ". . ." ?
aloso

Aloso'nun dediği gibi, bu yöntem işe yaramayacak.
Reality-Torrent

1
@ Reality-Torrent Bu eski bir gönderi.
cst1992

Yanıtlar:


109

Parantez değil, köşeli parantez kullanın:

str[i] === " "

Veya charAt:

str.charAt(i) === " "

Şunlarla da yapabilirsiniz .split():

return str.split(' ').length;

Sanırım söylediğin şeyi anladım, yukarıdaki düzenlenmiş orijinal sorudaki kodum iyi görünüyor mu?

çözümünüz, kelimelerin boşluk karakteri dışında herhangi bir şeyle sınırlandırıldığı yerlerde çalışır mı? Satırsonu veya sekmelerle mi söyleyin?
nemesisfixx

7
@ Blender iyi bir çözüm ama bu, bir dizede atlanan çift boşluklar için yanlış sonuç verebilir ..
ipalibowhyte

95

Tekerlekleri yeniden icat etmeden önce bunları deneyin

dan JavaScript kullanarak bağın içerisindeki kelimelerin Sayım sayısı

function countWords(str) {
  return str.trim().split(/\s+/).length;
}

dan http://www.mediacollege.com/internet/javascript/text/count-words.html

function countWords(s){
    s = s.replace(/(^\s*)|(\s*$)/gi,"");//exclude  start and end white-space
    s = s.replace(/[ ]{2,}/gi," ");//2 or more space to 1
    s = s.replace(/\n /,"\n"); // exclude newline with a start spacing
    return s.split(' ').filter(function(str){return str!="";}).length;
    //return s.split(' ').filter(String).length; - this can also be used
}

dan kullan JavaScript, bir dizede kelimeleri saymak için bir normal ifade kullanarak OLMADAN - bu en iyi yaklaşım olacaktır

function WordCount(str) {
     return str.split(' ')
            .filter(function(n) { return n != '' })
            .length;
}

Yazardan Notlar:

Bu komut dosyasını, istediğiniz şekilde kelimeleri sayacak şekilde uyarlayabilirsiniz. Önemli olan s.split(' ').length- bu boşlukları sayar. Komut dosyası, saymadan önce tüm fazladan boşlukları (çift boşluklar vb.) Kaldırmaya çalışır. Metin aralarında boşluk olmayan iki kelime içeriyorsa, bunları tek kelime olarak sayar, örneğin "İlk cümle. Sonraki cümlenin başlangıcı".


Bu sözdizimini hiç görmedim: s = s.replace (/ (^ \ s *) | (\ s * $) / gi, ""); s = s.replace (/ [] {2,} / gi, ""); s = s.replace (/ \ n /, "\ n"); her satır ne anlama geliyor? bu kadar muhtaç olduğum için özür dilerim

herhangi bir şey? bu kod çok kafa karıştırıcı ve ondan tam anlamıyla kopyalayıp yapıştırdığınız web sitesi hiç yardımcı olmuyor. Her şeyden çok kafam karıştı, anladığım kadarıyla iki boşluksuz kelimeleri kontrol etmemiz gerekiyordu ama nasıl? sadece rastgele yerleştirilmiş bir milyon karakter gerçekten yardımcı

Senden tek istediğim, yazdığın kodu açıklaman çok güzel. Sözdizimini daha önce hiç görmemiştim ve ne anlama geldiğini öğrenmek istedim. Sorun değil Ayrı bir soru sordum ve biri sorumu derinlemesine yanıtladı. Çok şey istediğim için özür dilerim.

1
str.split (/ \ s + /). uzunluk gerçekte olduğu gibi çalışmaz: sondaki beyaz boşluk başka bir kelime olarak kabul edilir.
Ian

2
Boş giriş için 1 döndürdüğünü unutmayın.
pie6k

21

Bir dizedeki kelimeleri saymanın bir yolu daha. Bu kod, yalnızca alfanümerik karakterler ve "_", "" "," - "," "" karakterleri içeren kelimeleri sayar.

function countWords(str) {
  var matches = str.match(/[\w\d\’\'-]+/gi);
  return matches ? matches.length : 0;
}

2
’'-"Kedi miyav" ifadesinin 3 kelime olarak sayılmaması için eklemeyi de düşünebilirsiniz . Ve "arada"
mpen

@mpen öneri için teşekkürler. Cevabımı buna göre güncelledim.
Alex


1
’'Normal ifadede kaçmanıza gerek yok . /[\w\d’'-]+/giESLint yararsız kaçış uyarılarından kaçınmak için kullanın
Stefan Blamberg

18

Dizeyi temizledikten sonra, boşluk olmayan karakterleri veya sözcük sınırlarını eşleştirebilirsiniz.

Bir dizedeki kelimeleri yakalamak için iki basit normal ifade:

  • Beyaz boşluk olmayan karakter dizisi: /\S+/g
  • Kelime sınırları arasında geçerli karakterler: /\b[a-z\d]+\b/g

Aşağıdaki örnek, bu yakalama kalıplarını kullanarak sözcük sayımının bir dizeden nasıl alınacağını gösterir.

/*Redirect console output to HTML.*/document.body.innerHTML='';console.log=function(s){document.body.innerHTML+=s+'\n';};
/*String format.*/String.format||(String.format=function(f){return function(a){return f.replace(/{(\d+)}/g,function(m,n){return"undefined"!=typeof a[n]?a[n]:m})}([].slice.call(arguments,1))});

// ^ IGNORE CODE ABOVE ^
//   =================

// Clean and match sub-strings in a string.
function extractSubstr(str, regexp) {
    return str.replace(/[^\w\s]|_/g, '')
        .replace(/\s+/g, ' ')
        .toLowerCase().match(regexp) || [];
}

// Find words by searching for sequences of non-whitespace characters.
function getWordsByNonWhiteSpace(str) {
    return extractSubstr(str, /\S+/g);
}

// Find words by searching for valid characters between word-boundaries.
function getWordsByWordBoundaries(str) {
    return extractSubstr(str, /\b[a-z\d]+\b/g);
}

// Example of usage.
var edisonQuote = "I have not failed. I've just found 10,000 ways that won't work.";
var words1 = getWordsByNonWhiteSpace(edisonQuote);
var words2 = getWordsByWordBoundaries(edisonQuote);

console.log(String.format('"{0}" - Thomas Edison\n\nWord count via:\n', edisonQuote));
console.log(String.format(' - non-white-space: ({0}) [{1}]', words1.length, words1.join(', ')));
console.log(String.format(' - word-boundaries: ({0}) [{1}]', words2.length, words2.join(', ')));
body { font-family: monospace; white-space: pre; font-size: 11px; }


Benzersiz Kelimeleri Bulmak

Benzersiz sayılar elde etmek için bir kelime eşlemesi de oluşturabilirsiniz.

function cleanString(str) {
    return str.replace(/[^\w\s]|_/g, '')
        .replace(/\s+/g, ' ')
        .toLowerCase();
}

function extractSubstr(str, regexp) {
    return cleanString(str).match(regexp) || [];
}

function getWordsByNonWhiteSpace(str) {
    return extractSubstr(str, /\S+/g);
}

function getWordsByWordBoundaries(str) {
    return extractSubstr(str, /\b[a-z\d]+\b/g);
}

function wordMap(str) {
    return getWordsByWordBoundaries(str).reduce(function(map, word) {
        map[word] = (map[word] || 0) + 1;
        return map;
    }, {});
}

function mapToTuples(map) {
    return Object.keys(map).map(function(key) {
        return [ key, map[key] ];
    });
}

function mapToSortedTuples(map, sortFn, sortOrder) {
    return mapToTuples(map).sort(function(a, b) {
        return sortFn.call(undefined, a, b, sortOrder);
    });
}

function countWords(str) {
    return getWordsByWordBoundaries(str).length;
}

function wordFrequency(str) {
    return mapToSortedTuples(wordMap(str), function(a, b, order) {
        if (b[1] > a[1]) {
            return order[1] * -1;
        } else if (a[1] > b[1]) {
            return order[1] * 1;
        } else {
            return order[0] * (a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0));
        }
    }, [1, -1]);
}

function printTuples(tuples) {
    return tuples.map(function(tuple) {
        return padStr(tuple[0], ' ', 12, 1) + ' -> ' + tuple[1];
    }).join('\n');
}

function padStr(str, ch, width, dir) { 
    return (width <= str.length ? str : padStr(dir < 0 ? ch + str : str + ch, ch, width, dir)).substr(0, width);
}

function toTable(data, headers) {
    return $('<table>').append($('<thead>').append($('<tr>').append(headers.map(function(header) {
        return $('<th>').html(header);
    })))).append($('<tbody>').append(data.map(function(row) {
        return $('<tr>').append(row.map(function(cell) {
            return $('<td>').html(cell);
        }));
    })));
}

function addRowsBefore(table, data) {
    table.find('tbody').prepend(data.map(function(row) {
        return $('<tr>').append(row.map(function(cell) {
            return $('<td>').html(cell);
        }));
    }));
    return table;
}

$(function() {
    $('#countWordsBtn').on('click', function(e) {
        var str = $('#wordsTxtAra').val();
        var wordFreq = wordFrequency(str);
        var wordCount = countWords(str);
        var uniqueWords = wordFreq.length;
        var summaryData = [
            [ 'TOTAL', wordCount ],
            [ 'UNIQUE', uniqueWords ]
        ];
        var table = toTable(wordFreq, ['Word', 'Frequency']);
        addRowsBefore(table, summaryData);
        $('#wordFreq').html(table);
    });
});
table {
    border-collapse: collapse;
    table-layout: fixed;
    width: 200px;
    font-family: monospace;
}
thead {
    border-bottom: #000 3px double;;
}
table, td, th {
    border: #000 1px solid;
}
td, th {
    padding: 2px;
    width: 100px;
    overflow: hidden;
}

textarea, input[type="button"], table {
    margin: 4px;
    padding: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<h1>Word Frequency</h1>
<textarea id="wordsTxtAra" cols="60" rows="8">Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.

Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this.

But, in a larger sense, we can not dedicate -- we can not consecrate -- we can not hallow -- this ground. The brave men, living and dead, who struggled here, have consecrated it, far above our poor power to add or detract. The world will little note, nor long remember what we say here, but it can never forget what they did here. It is for us the living, rather, to be dedicated here to the unfinished work which they who fought here have thus far so nobly advanced. It is rather for us to be here dedicated to the great task remaining before us -- that from these honored dead we take increased devotion to that cause for which they gave the last full measure of devotion -- that we here highly resolve that these dead shall not have died in vain -- that this nation, under God, shall have a new birth of freedom -- and that government of the people, by the people, for the people, shall not perish from the earth.</textarea><br />
<input type="button" id="countWordsBtn" value="Count Words" />
<div id="wordFreq"></div>


1
Bu harika ve kapsamlı bir cevap. Tüm örnekler için teşekkürler, gerçekten kullanışlıdırlar!
Connor

14

Sanırım bu yöntem istediğinden daha fazlası

var getWordCount = function(v){
    var matches = v.match(/\S+/g) ;
    return matches?matches.length:0;
}

7

String.prototype.match bir dizi döndürürse uzunluğu kontrol edebiliriz,

Bu yöntemi en açıklayıcı buluyorum

var str = 'one two three four five';

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

1
dizge boşsa hatanın meydana gelebileceği olası yer
Purkhalo Alex

5

Şimdiye kadar bulduğum en kolay yol, split ile bir normal ifade kullanmak.

var calculate = function() {
  var string = document.getElementById('input').value;
  var length = string.split(/[^\s]+/).length - 1;
  document.getElementById('count').innerHTML = length;
};
<textarea id="input">My super text that does 7 words.</textarea>
<button onclick="calculate()">Calculate</button>
<span id="count">7</span> words


3

@ 7-isnotbad tarafından verilen cevap son derece yakındır, ancak tek kelimelik satırları saymaz. İşte olası her kelime, boşluk ve satırsonu kombinasyonunu hesaba katan düzeltme.

function countWords(s){
    s = s.replace(/\n/g,' '); // newlines to space
    s = s.replace(/(^\s*)|(\s*$)/gi,''); // remove spaces from start + end
    s = s.replace(/[ ]{2,}/gi,' '); // 2 or more spaces to 1
    return s.split(' ').length; 
}

3

İşte benim yaklaşımım, basitçe bir dizeyi boşluklara böler, ardından for diziyi döngülere sokar ve [i] dizisi belirli bir normal ifade kalıbıyla eşleşirse sayısı artırır.

    function wordCount(str) {
        var stringArray = str.split(' ');
        var count = 0;
        for (var i = 0; i < stringArray.length; i++) {
            var word = stringArray[i];
            if (/[A-Za-z]/.test(word)) {
                count++
            }
        }
        return count
    }

Böyle çağrıldı:

var str = "testing strings here's a string --..  ? // ... random characters ,,, end of string";
wordCount(str)

(işlevin doğruluğunu göstermek için fazladan karakterler ve boşluklar eklendi)

Yukarıdaki dize 10 değerini döndürür, bu doğru!


Bazı diller kullanmayan [A-Za-z]hiç
David

3

Bu, tüm vakaları ele alacak ve mümkün olduğunca verimli olacaktır. (Birden fazla boşluk olmadığını önceden bilmediğiniz sürece bölme ('') istemezsiniz.):

var quote = `Of all the talents bestowed upon men, 
              none is so precious as the gift of oratory. 
              He who enjoys it wields a power more durable than that of a great king. 
              He is an independent force in the world. 
              Abandoned by his party, betrayed by his friends, stripped of his offices, 
              whoever can command this power is still formidable.`;

function WordCount(text) {
    text = text.trim();
    return text.length > 0 ? text.split(/\s+/).length : 0;
}
console.log(WordCount(quote));//59
console.log(WordCount('f'));//1
console.log(WordCount('  f '));//1
console.log(WordCount('   '));//0

2

Bunu yapmanın daha verimli bir yolu olabilir, ancak bu benim için işe yaradı.

function countWords(passedString){
  passedString = passedString.replace(/(^\s*)|(\s*$)/gi, '');
  passedString = passedString.replace(/\s\s+/g, ' '); 
  passedString = passedString.replace(/,/g, ' ');  
  passedString = passedString.replace(/;/g, ' ');
  passedString = passedString.replace(/\//g, ' ');  
  passedString = passedString.replace(/\\/g, ' ');  
  passedString = passedString.replace(/{/g, ' ');
  passedString = passedString.replace(/}/g, ' ');
  passedString = passedString.replace(/\n/g, ' ');  
  passedString = passedString.replace(/\./g, ' '); 
  passedString = passedString.replace(/[\{\}]/g, ' ');
  passedString = passedString.replace(/[\(\)]/g, ' ');
  passedString = passedString.replace(/[[\]]/g, ' ');
  passedString = passedString.replace(/[ ]{2,}/gi, ' ');
  var countWordsBySpaces = passedString.split(' ').length; 
  return countWordsBySpaces;

}

aşağıdakilerin tümünü ayrı kelimeler olarak tanıyabilir:

abc,abc= 2 kelime,
abc/abc/abc= 3 kelime (ileri ve geri eğik çizgilerle çalışır),
abc.abc= 2 kelime,
abc[abc]abc= 3 kelime,
abc;abc= 2 kelime,

(denediğim diğer bazı öneriler yukarıdaki her örneği yalnızca 1 x kelime olarak sayar) aynı zamanda:

  • baştaki ve sondaki tüm beyaz boşlukları yoksayar

  • tek bir harf ve ardından yeni bir satırı kelime olarak sayıyor - bu sayfada verilen bazı önerilerin sayılmadığını buldum, örneğin:
    a
    a
    a
    a
    a
    bazen 0 x kelime olarak sayılır ve diğer işlevler bunu 5 x kelime yerine yalnızca 1 x kelime olarak sayar)

Herhangi birinin onu nasıl geliştireceğine veya daha temiz / daha verimli olduğuna dair bir fikri varsa - o zaman lütfen size 2 sent ekleyin! Umarım Bu Birine Yardımcı Olur.


2
function countWords(str) {
    var regEx = /([^\u0000-\u007F]|\w)+/g;  
    return str.match(regEx).length;
}

Açıklama:

/([^\u0000-\u007F]|\w)kelime karakterleriyle eşleşir - bu harika -> regex bizim için işin zor kısmını yapıyor. (Bu model aşağıdaki SO cevabına dayanmaktadır: https://stackoverflow.com/a/35743562/1806956 , @Landeeyo)

+ önceden belirtilen kelime karakterlerinin tüm dizesiyle eşleşir - bu nedenle temel olarak kelime karakterlerini gruplandırırız.

/g sonuna kadar bakmaya devam ettiği anlamına gelir.

str.match(regEx) bulunan kelimelerin bir dizisini döndürür - bu yüzden uzunluğunu sayarız.


1
Karmaşık normal ifade, büyücülük sanatıdır. Telaffuz etmeyi öğrendiğimiz ama nedenini sormaya cesaret edemediğimiz bir büyü. Paylaşım için teşekkürler.
Blaise

^ bu harika bir alıntı
r3wt

Şu hatayı alıyorum: hata Normal ifadede beklenmeyen kontrol karakter (ler) i: \ x00 no-control-regex
Aliton Oliveira

Dize / veya (
Walter Monecke

@WalterMonecke az önce Chrome'da test etti - hatayı alamadı. Bununla nerede bir hata aldınız? Teşekkürler
Ronen Rabinovici

2

Lodash kullanmak isteyenler için şu _.wordsfonksiyonu kullanabilirsiniz :

var str = "Random String";
var wordCount = _.size(_.words(str));
console.log(wordCount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>


2

Doğruluk da önemlidir.

3 seçeneğinin yaptığı şey, temelde tüm beyaz boşlukları a ile değiştirmek +1ve ardından 1bunu size kelime sayısını verecek şekilde hesaplamak için değerlendirmektir .

Burada yaptığım dört yöntem arasında en doğru ve en hızlı yöntem bu.

Lütfen daha yavaş olduğunu return str.split(" ").length;ancak Microsoft Word ile karşılaştırıldığında doğru olduğunu unutmayın .

Aşağıdaki dosya işlemlerine ve döndürülen kelime sayısına bakın.

İşte bu tezgah testini çalıştırmak için bir bağlantı. https://jsbench.me/ztk2t3q3w5/1

// This is the fastest at 111,037 ops/s ±2.86% fastest
var str = "All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy.";
function WordCount(str) {
  return str.split(" ").length;
}
console.log(WordCount(str));
// Returns 241 words. Not the same as Microsoft Word count, of by one.

// This is the 2nd fastest at 46,835 ops/s ±1.76% 57.82% slower
var str = "All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy.";
function WordCount(str) {
  return str.split(/(?!\W)\S+/).length;
}
console.log(WordCount(str));
// Returns 241 words. Not the same as Microsoft Word count, of by one.

// This is the 3rd fastest at 37,121 ops/s ±1.18% 66.57% slower
var str = "All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy.";
function countWords(str) {
  var str = str.replace(/\S+/g,"\+1");
  return eval(str);
}
console.log(countWords(str));
// Returns 240 words. Same as Microsoft Word count.

// This is the slowest at 89 ops/s 17,270 ops/s ±2.29% 84.45% slower
var str = "All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy.";
function countWords(str) {
  var str = str.replace(/(?!\W)\S+/g,"1").replace(/\s*/g,"");
  return str.lastIndexOf("");
}
console.log(countWords(str));
// Returns 240 words. Same as Microsoft Word count.


1

İşte bir HTML kodundaki kelimelerin sayısını sayan bir işlev:

$(this).val()
    .replace(/((&nbsp;)|(<[^>]*>))+/g, '') // remove html spaces and tags
    .replace(/\s+/g, ' ') // merge multiple spaces into one
    .trim() // trim ending and beginning spaces (yes, this is needed)
    .match(/\s/g) // find all spaces by regex
    .length // get amount of matches

1
let leng = yourString.split(' ').filter(a => a.trim().length > 0).length

6
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini artırmaya gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtlayacağınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın.
Isma

1

Bunun daha önce söylendiğinden veya burada gerekli olup olmadığından emin değilim, ama dizeyi bir dizi yapıp uzunluğu bulamaz mıydınız?

let randomString = "Random String";

let stringWords = randomString.split(' ');
console.log(stringWords.length);

1

Bu cevabın aşağıdakiler için tüm çözümleri vereceğini düşünüyorum:

  1. Belirli bir dizedeki karakter sayısı
  2. Belirli bir dizedeki kelime sayısı
  3. Belirli bir dizedeki satır sayısı

 function NumberOf() { 
		 var string = "Write a piece of code in any language of your choice that computes the total number of characters, words and lines in a given text. \n This is second line. \n This is third line.";

		 var length = string.length; //No of characters
		 var words = string.match(/\w+/g).length; //No of words
		 var lines = string.split(/\r\n|\r|\n/).length; // No of lines

		 console.log('Number of characters:',length);
		 console.log('Number of words:',words);
		 console.log('Number of lines:',lines);


}

NumberOf();

  1. Öncelikle verilen dizenin uzunluğunu bulmanız gerekir. string.length
  2. Daha sonra dizgiyle eşleştirerek kelimelerin sayısını bulabilirsiniz. string.match(/\w+/g).length
  3. Sonunda her satırı bu şekilde bölebilirsiniz string.length(/\r\n|\r|\n/).length

Umarım bu, bu 3 yanıtı arayanlara yardımcı olabilir.


1
Mükemmel. Lütfen değişken adını stringbaşka bir şeyle değiştirin. Kafa karıştırıcı. Bir string.match()an için statik bir yöntem olduğunu düşünmeme neden oldu . Şerefe.
Shy Agam

Evet!! Elbette. @ShyAgam
LiN

0
<textarea name="myMessage" onkeyup="wordcount(this.value)"></textarea>
<script type="text/javascript">
var cnt;
function wordcount(count) {
var words = count.split(/\s/);
cnt = words.length;
var ele = document.getElementById('w_count');
ele.value = cnt;
}
document.write("<input type=text id=w_count size=4 readonly>");
</script>

0

Geç olduğunu biliyorum ama bu normal ifade sorununuzu çözmeli. Bu, dizenizdeki kelime sayısı ile eşleşecek ve döndürecektir. Aksine, çözüm olarak işaretlediğiniz, gerçekten sadece 1 kelime olmasına rağmen boşluk-boşluk-kelimeyi 2 kelime olarak sayacak.

function countWords(str) {
    var matches = str.match(/\S+/g);
    return matches ? matches.length : 0;
}

0

Kodunuzda bazı hatalar var.

function WordCount(str) {
    var totalSoFar = 0;
    for (var i = 0; i < str.length; i++) {
        if (str[i] === " ") {
            totalSoFar += 1;
        }
    }
    return totalSoFar + 1; // you need to return something.
}
console.log(WordCount("Random String"));

Normal ifadeleri kullanmanın başka bir kolay yolu vardır:

(text.split(/\b/).length - 1) / 2

Tam değer yaklaşık 1 kelime farklı olabilir, ancak aynı zamanda boşluksuz kelime sınırlarını da sayar, örneğin "kelime-kelime. kelime". Ve harf veya rakam içermeyen kelimeleri saymaz.


0
function totalWordCount() {
  var str ="My life is happy"
  var totalSoFar = 0;

  for (var i = 0; i < str.length; i++)
    if (str[i] === " ") { 
     totalSoFar = totalSoFar+1;
  }
  totalSoFar = totalSoFar+ 1; 
  return totalSoFar
}

console.log(totalWordCount());

Lütfen yanıtınızı düzenleyen açıklamalar ekleyin, yalnızca kod yanıtından kaçının
GGO

0
function WordCount(str) {
    var totalSoFar = 0;
    for (var i = 1; i < str.length; i++) {
        if (str[i] === " ") {
            totalSoFar ++;
        }
    }
    return totalSoFar; 
}
console.log(WordCount("hi my name is raj));

2
Yalnızca kod yanıtları bu sitede genellikle hoş karşılanmaz. Lütfen cevabınızı kodunuz hakkında bazı yorumlar veya açıklamalar içerecek şekilde düzenler misiniz? Açıklamalar aşağıdaki gibi sorulara cevap vermelidir: Ne işe yarar? Bunu nasıl yapıyor? Nereye gidiyor? OP'nin problemini nasıl çözer? Bakınız: Nasıl cevaplanır . Teşekkürler!
Eduardo Baitello
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.