15

我正在尝试以可读格式返回字符串的前 5 个单词,没有“”或逗号分隔单词。我不确定它是正则表达式还是什么,但我无法弄清楚,尽管它可能很简单。谢谢!

看看我到目前为止有什么:http: //jsfiddle.net/ccnokes/GktTd/

这是我正在使用的功能:

function getWords(string){
    var words = string.split(/\s+/).slice(1,5);
    return words;
}
4

4 回答 4

35

你唯一缺少的是一个join()

试试这个:

function getWords(str) {
    return str.split(/\s+/).slice(0,5).join(" ");
}

这将执行以下操作:

var str = "This is a long string with more than 5 words.";
console.log(getWords(str)); // << outputs "This is a long string"

查看此链接以进一步解释.join(). javascript中的函数。本质上 - 如果您不提供参数,它使用默认分隔符,,而如果您提供一个(正如我在上面的示例中所做的那样,通过提供" "- 它将使用它。这就是输出成为第一个的原因5 个单词,每个单词之间用空格隔开。

于 2012-10-30T19:54:37.323 回答
0

这些逗号来自您输出数据的方式:

//write to DOM
$('<h2 />').text(getWords(str).join(' ')).appendTo('body');

​ 当您将字符串添加到 时getWords(str),javascript 会尝试将数组转换为字符串 - 它通过用逗号连接单词来实现。如果您想将它们与其他东西一起加入,请使用join.

于 2012-10-30T19:54:49.720 回答
0

Troy Alford 解决方案有效,但有一个缺点。如果单词之间有多个空格,或者换行符 (\n) 将被转换为单个空格,例如:

'jQuery 是一个
多浏览器'

将转换为

'jQuery 是一个多浏览器'

为了解决这个问题,我们可能会使用单词边界正则表达式。它可能看起来像这样:

function getFirstWords(text, wordsAmount) {
  const arr = text.split(/\b/g);
  const arrItemsAmount = (/\b/.exec(text) && /\b/.exec(text).index) ?
                           wordsAmount * 2 :
                           wordsAmount * 2 - 1;
  return arr.slice(0, arrItemsAmount).join('');
}
于 2016-12-15T07:58:26.410 回答
-1

你可以用 str.substring(1,15)

于 2021-07-29T11:32:32.980 回答