在JavaScript中寻找最后一个单词

4

我正在处理最后一个句子中的逻辑。单词可以通过空格或“-”字符分隔。

有没有更容易的方法获取它?

编辑

我可以从句子末尾向后遍历来完成,但我想找到更好的方法。

6个回答

17
尝试使用一个可以匹配空格或连字符的正则表达式进行分割,并取最后一个元素:
var lastWord = function(o) {
  return (""+o).replace(/[\s-]+$/,'').split(/[\s-]/).pop();
};
lastWord('This is a test.'); // => 'test.'
lastWord('Here is something to-do.'); // => 'do.'

正如@alex所指出的,修剪任何尾随的空格或连字符是值得的。确保参数是一个字符串也是个好主意。


split()pop() 中使用正则表达式 /^\s+|\s+$/g 可以使字符串去除首尾空格,这样做很棒! - alex
@alex:好主意,但我想前导空格并不重要。 - maerics
不错,我知道一定有更好的方法来做这个。我真的不想使用循环+1的方式。 - Tx3

6

使用正则表达式:

/.*[\s-](\S+)/.exec(str)[1];

同时忽略末尾的空格


你能解释一下为什么索引1有这个结果吗? - Tx3
1
因为这是正则表达式的结果。index[0] 是匹配到的整个字符串,[1] 是第一组括号中的内容(即 (\S+) 中的内容)。 - user578895

0
你可以尝试这样做...
<script type="text/javascript">
var txt = "This is the sample sentence";
spl = txt.split(" ");
for(i = 0; i < spl.length; i++){
    document.write("<br /> Element " + i + " = " + spl[i]); 
}
</script>

你需要将txt.split(" ")替换为txt.split("-")。 - Anish

0

好的,使用 Split 函数

  string lastWord = input.Split(' ').Last();

或者

string[] parts = input.Split(' ');
string lastWord = parts[parts.Length - 1];

虽然这对于这个字符串可能有效,但对于稍微不同的字符串可能无效,因此您要么必须找出如何相应地更改代码,要么发布所有规则。

字符串输入 =“....,API”;

在这里,逗号将成为“单词”的一部分。

此外,如果获取单词的第一种方法是正确的,即最后一个空格后面的所有内容,并且您的字符串遵循以下规则:

Will always contain at least one space
Does not end with one or more space (in case of this you can trim it)

那么你可以使用这段代码,它将分配较少的对象到堆上,以便稍后进行垃圾回收:

string lastWord = input.Substring(input.LastIndexOf(' ') + 1);

希望它有所帮助


最好您可以使用Maerics的正则表达式答案。 - Anand Thangappan
1
var str = "hi anand" alert(str.replace(/[\s-]+$/,'').split(/[\s-]/).pop()); - Anand Thangappan

0

问题在于除了一个所需的字符外,其他都不符合要求。更强大的字符串类通常具有接受字符数组的拆分函数。 - Tx3
好的,你需要做两次,然后看哪一个是最后一个。先调用lastIndexOf(' '),然后调用lastIndexOf('-'),最后使用其中结果最大的一个。 - Daveo

0

这里有一个类似的讨论,你可以看一下


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