我正在尝试将单词分开,以便我可以计算每个单词中的音节,但我现在似乎无法隔离单词,我只能计算句子中的整个音节数,
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]
这是最后一个字符,当我想引用单词
时我确信这是一个简单的解决方案,但我无法绕过它
答案 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 !,将它们全部改为单词现在