弦乐&数组,并引用其中的元素

时间:2012-12-26 16:07:01

标签: javascript ajax

我正在尝试将单词分开,以便我可以计算每个单词中的音节,但我现在似乎无法隔离单词,我只能计算句子中的整个音节数,

        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] 

这是最后一个字符,当我想引用单词

我确信这是一个简单的解决方案,但我无法绕过它

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我是个白痴,正在使用lwords,但是正在打印WordsArray !,将它们全部改为单词现在