-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);

这会拆分字符串,使用所有空格、点、括号和其他标点符号作为分隔符。我已经排除了破折号 ( -),以避免将单词算作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 回答