从javascript String创建一个包含X个单词的数组

时间:2015-08-31 18:38:07

标签: javascript arrays regex

Hello Stack社区,

我正在尝试使用简单的javascript函数来首先计算给定字符串值的单词总数。

在此之后,我不想将X个单词存储到一个数组中,以便能够循环使用附加的html元素。

例如,我有这个字符串:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis feugiat sollicitudin lacus, nec pulvinar quam scelerisque at. Phasellus ut tellus scelerisque, fringilla ligula a, commodo odio. Aenean mattis eros sed purus iaculis, at pellentesque ligula luctus. Pellentesque luctus augue ut quam consequat rhoncus. In at dolor sed ipsum ullamcorper fermentum. Pellentesque porta convallis nisl vitae cursus. Maecenas luctus libero sit amet efficitur consequat. Suspendisse nec luctus dolor. Fusce sit amet scelerisque erat. Aenean ac tristique nisl. Etiam in est purus. In magna nunc, viverra nec ante quis, aliquam venenatis sem.

这是我实际工作的代码。 (我刚刚接受了所需的部分)。

// Var for Word max
    var wordsMaxFirstPage = 40;
    var wordsMaxOthersPages = 50;

    // Default field (My String example)
    var defaultField = $(this).find('.c_6937 .textarea .value');

    // Count the number of words for this form
    var countLengthOfCommentPage = defaultField.text().split(' ').length;

    // Creat Array of the comment splits by Maximum words per page
    var chunks = [];
    for (var i = 0, charsLength = countLengthOfCommentPage; i < charsLength; i += wordsMaxFirstPage) {
        chunks.push(defaultField.html().substring(i, i + wordsMaxOthersPages));
    }


    // Execute Array to build the new HTML
    for (var key in chunks) {
        if (chunks.hasOwnProperty(key)) {

            $(this).find('.c_6937').append('<div class="value line_'+key+'" style="font-size: 20px; margin: 0px; line-height: 26px; font-family: Times, serif; font-weight: normal;">' + chunks[key] + '</div>');

            console.log(key + " -> " + chunks[key]);
        }
    }


    // Debug
    console.log(countLengthOfCommentPage);

对我来说,事情变得复杂的地方是我构建数组的地方。是的我知道,我使用substring方法,这个方法实际上适用于caracters。

我的问题很简单。有没有办法用正则表达式函数构建数组,还是我错过了一些非常简单的东西?

2 个答案:

答案 0 :(得分:2)

实际上你已经在创建数组,但没有保存它;)。

Javascript中的split()函数会拆分给定的字符串,并创建一个包含结果片段的数组。

我建议更换这一行:

var countLengthOfCommentPage = defaultField.text().split(' ').length;

这两个:

var chunks = defaultField.text().split(' ');
var countLengthOfCommentPage = chunks.length;

如果这可以解决您的问题,请告诉我。

<强>更新

我的第一个建议是在每个chunks元素中给你一个单词,这在你的案例中不是解决方案。

您发布的原始代码的问题是构建数组的循环不会考虑每个单词的长度。

您可以像这样构建数组:

// split the text into separate words
var words = defaultField.text().split(' ');

//read total number of words
var totalWordsCount = words.length;
//maximum number of words per page allowed, set to 10 as example
var wordsCountPerPage = 10;
var chunks = [];

// in each iteration "i" points to the first word in the new page, so it's 0, 11, 21 etc.
for (var i = 0; i < totalWordsCount; i+=wordsCountPerPage) {
    //'slice()' function gets words for the current line, then they're concatenated with 'join()'
    //'Math.min()' function is used to make sure that appropriate number of words are taken for the last page
    chunks.push(words.slice(i, Math.min(i+wordsCountPerPage, totalWordsCount)).join(' '));
}

我已经更新了jsFiddle,它似乎按预期工作。如果这解决了您的问题,请告诉我。

更新II

在评论中您还要求在每页达到单词限制之前检测最后一句的结尾,以便尽可能在页面上显示完整的句子。这个jsFiddle更新为以这种方式工作:http://jsfiddle.net/gbb2ae4g/17/。我们的想法是以类似于先前版本的方式找到预期的页面结尾,然后搜索以 dot 结尾的最后一个单词,并相应地调整页面上的单词数。此代码假定 dot 后面始终跟一个 space 字符,除非它是文本中的最后一个字符。

我还更新了作为上一个答案给出的代码(第一次更新),因为它错误地执行了页面结束检查。

答案 1 :(得分:0)

如果我理解你的话,你想要的是从字符串中删除单词数

如果是,请阅读MDN SPLIT METHOD处的拆分方法。

正如您在那里看到的那样,split方法有一个limit参数,因此下一个代码将起作用:

var x = "bla bla bla bla bla";
var splits = x.split(" ",3);

然后splits将是一个包含值bla,bla,bla

的数组