-1

単語を分割して、それぞれの音節を数えようとしていますが、現時点では単語を分離できないようです。文の音節の総数しか数えられません。

        var text = $(this).val();
        var words = new Array(text.replace(/\s/g, ' ').split(' '));
        function countSyllables(words) {
            word = words.toString();
            var lWords = word.toLowerCase();
            var wordsArray=lWords.split(",");
            for (var z = 0; z < lWords.length; z++) {
                console.log(wordsArray, "- array of words");
                console.log(wordsArray[z], "- one item[z]");

私の問題は、配列を文字列に変換して下げる必要があるようですが、両方の場合で、音節を数えるために個々の単語を参照することはできません。

[16:04:02.726] ["this", "is", "test", "text", "", "the", "words", "need", "to", "be", "separately", "analysed.", "hello"] - array of words    
[16:04:02.726] o - one item[z] 

これは、単語を参照したい場合の最後の文字です

それは簡単な解決策だと確信していますが、頭を包むことはできません

4

2 に答える 2

1

この行は多くのレベルで間違っています:

var words = new Array(text.replace(/\s/g, ' ').split(' '));

あなたが求めているのは、AFAIK、次のようなものです。

var words = text.split(/[^a-z0-9\-]+/gi);

これにより、すべての空白、ドット、角かっこ、およびその他の句読点を区切り文字として使用して、文字列が分割されます。-2つの単語のように単語を数えないように、ダッシュ()を除外しましたice-creamそれを気にしない場合、またはダッシュを区切り文字として扱うときに結果の信頼性が高いと感じる場合は、ダッシュを省略してください。

var words = text.split(/[^a-z0-9]+/gi);
console.log(text + ' is approx. ' + words.length + ' words long');

小文字への変換について:テキスト全体をオフから小文字に変換してみませんか?

var words = text.toLowerCase().split(/[^a-z0-9\-]+/gi);

ああ、そしてこのコードの出力は配列に空の文字列を残しません:

'Foo... bar, Foobar and lorum ipsorum'.toLowerCase().split(/[^a-z0-9\-]+/gi);
//output: ["foo", "bar", "foobar", "and", "lorum", "ipsorum"]
//length returns 6, which I think is correct
于 2012-12-26T16:21:09.497 に答える
0

私はばかです、lwords を使用していましたが、wordsArray を印刷していました!、それらをすべて wordsArray に変更しました

于 2012-12-26T16:13:46.267 に答える