JavaScript:返回字符串中的最后一个单词

64

直接说吧:

我有一个字符串words,里面有两个单词,我需要返回最后一个单词。它们被一个空格分隔开。我该怎么做?

function test(words) {

var n = words.indexOf(" ");
var res = words.substring(n+1,-1);
return res;

}

我被告知要使用indexOfsubstring来完成这个任务,但实际上并不是必需的。请问有没有更简单的方法来做到这一点?(可以用或不用indexOfsubstring


13
提取最后一个单词:sentence.split(" ").slice(-1) - Blender
我不明白。你在问题中已经解决了自己的问题。你希望我们做什么? - Ivaylo Strandjev
1
@GrijeshChauhan:这不是一个有趣的问题。 - Blender
@Blender 是的。非常简单和常见的问题。 - Grijesh Chauhan
我解决了吗?因为这对我不起作用。 - Andrew P
显示剩余2条评论
12个回答

74

试试这个:

你可以使用n个字母长度的单词。

例如:

  words = "Hello World";
  words = "One Hello World";
  words = "Two Hello World";
  words = "Three Hello World";

所有的返回值都相同: "World"

function test(words) {
    var n = words.split(" ");
    return n[n.length - 1];

}

1
请注意,对于以空格结尾的字符串,("Hello World ").split(" "); 将返回 ["Hello", "World", ""],其中“最后一个单词”是 "" - now_world
13
你可以使用 words.trim().split(" "); 实现这个功能。 - Jyoti Prakash

69

你还可以:

words.split(" ").pop();

只需将split函数的结果(数组)链接起来并弹出最后一个元素即可在一行中完成操作:)


1
虽然这段代码可以回答问题,但提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - Benjamin W.

39
var data = "Welcome to Stack Overflow";
console.log(data.split(" ").splice(-1));

输出

[ 'Overflow' ]

即使原始字符串中没有空格,这也可以正常工作,因此您可以像这样直接获取元素

var data = "WelcometoStackOverflow";
console.log(data.split(" ").splice(-1)[0]);

输出

WelcometoStackOverflow

可以将 splice(-1)[0] 替换为 pop() - Roman Sklyarov
你需要使用trim()函数来去除尾随空格,以避免出现问题。 - twobob
很久很久以前...但是...如果你想要移除单词之间的额外空格,可以使用以下代码:data.split(/\s+/).splice(-1)); - Sturm

12
你想要“最后一个单词”,这表明使用 lastIndexOf 方法可能比使用 indexOf 更有效率。另外,字符串 也可以使用 slice 方法。
var str = 'foo bar fizz buzz';
str.slice(
    str.lastIndexOf(' ') + 1
); // "buzz"

参见2011年的this jsperf,展示了split vs indexOf + slice vs indexOf + substring以及this perf,显示lastIndexOfindexOf的效率几乎相同,这主要取决于匹配发生之前的时间长度。


2
简洁,清晰,无任何混淆。 - chris.nesbit1

3
为了完成Jyoti Prakash,您可以添加多个分隔符(\s|,)来拆分您的字符串(通过这篇文章)。
示例:
function lastWord(words) {
  var n = words.split(/[\s,]+/) ;
  return n[n.length - 1];
}

注意:正则表达式\s表示空白字符:空格字符、制表符、回车符、换行符、垂直制表符、换页符

片段

var wordsA = "Hello  Worlda"; // tab
var wordsB = "One Hello\nWorldb";
var wordsC = "Two,Hello,Worldc";
var wordsD = "Three Hello Worldd";

function lastWord(words) {
  var n = words.split(/[\s,]+/);
  return n[n.length - 1];
}


$('#A').html( lastWord(wordsA) );
$('#B').html( lastWord(wordsB) );
$('#C').html( lastWord(wordsC) );
$('#D').html( lastWord(wordsD) );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
A:<span id="A"></span><br/>
B:<span id="B"></span><br/>
C:<span id="C"></span><br/>
D:<span id="D"></span><br/>


2

补充被接受的答案,如果输入字符串是"Hello World "(注意末尾多了一个空格),它将返回''。下面的代码应该考虑到用户误打了" "

var lastWord= function(str) {
  if (str.trim() === ""){
    return 0;
  } else {   
    var splitStr = str.split(' ');
    splitStr = splitStr.filter(lengthFilter);
    return splitStr[splitStr.length - 1];
  }
};

var lengthFilter = function(str){
    return str.length >= 1;
};

1

根据我的经验,最简单的方法是:

lastName.trim().split(" ").slice(-1)

即使有尾随空格,它也会给出短语中的最后一个单词。我用它来显示姓氏缩写。希望对您也有用。


1

最简单的方法是使用slice方法:

例如:

let words = "hello world";
let res = words.slice(6,13);
console.log(res);

2
我会使用 words.split,因为你不需要知道空格的位置。这样会让你自己更加辛苦。 - dotnethaggis

0
/**
 * Get last word from a text
 * @param {!string} text
 * @return {!string}
 */
function getLastWord(text) {
  return text
    .split(new RegExp("[" + RegExp.quote(wordDelimiters + sentenceDelimiters) + "]+"))
    .filter(x => !!x)
    .slice(-1)
    .join(" ");
}

0

在 JavaScript 中,只需使用 .slice 和 .lastIndexOf。它非常简单易用。

const a = "Bringing founders's ideas to life";
const b = a.lastIndexOf(" ");
const word = a.slice(b, a.length);
console.log(word);


1
你的回答可以通过添加更多支持性信息来改进。请编辑以添加进一步的细节,比如引用或文档,以便其他人可以确认你的答案是正确的。你可以在帮助中心中找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接