如何在JavaScript中从数组中的每个字符串中选择倒数第二个单词

How do I select the second last word from each string in an array in JavaScript?

本文关键字:倒数 字符串 选择 倒数第二 单词 第二个 JavaScript 数组      更新时间:2023-09-26

假设我有一个字符串列表,如:

foo = ["asdfas ad sfa", "asdfa dfas fasd", "adf adfasd sdfasf adfdf"];

现在我想要一个映射,将这个数组映射到每个字符串的倒数第二个单词的列表中:

bar = ["ad", "dfas", "sdfasf"];

我知道我可以通过使用正则表达式/('w+)'s'w+$/找到它们,但我如何使用找到的结果来执行映射?

我想使用类似的正则表达式替换

bar = foo.map(function(d){return d.replace(/^.*'s('w+)'s'w+$/,"$1")});

更新:阅读下面的评论后,我认为这个可能更好:

bar = foo.map(function(d){return d.match(/('w+)'s'w+$/)[1]});

当没有倒数第二句话时,它会抛出错误,这满足了我的需求。当然,如果你想让它在没有找到倒数第二个单词时保持字符串不变,那么试试这个:

bar = foo.map(function(d){return d.replace(/.*?('w+)'s'w+$/,"$1")});

没错,map就是您需要的

foo = ["asdfas ad sfa", "asdfa dfas", "adf adfasd sdfasf adfdf"];
foo.map(function(str) {
    var words = str.split(" "), total = words.length;
    if (total>2) this.push(words[total-2]);;
}, bar=[]);
alert(bar);

忘记演示再次

新的演示EDIT:正如@jcsanyi提到的,当字符串包含的单词少于3个时,我以前的代码返回了空元素,所以我找到了一个解决方案,并再次修改了它

foo仍然是全局的(它不是一个bug),第二个元素现在只有两个字来检查

非常新的演示

试试这个。我使用了JavaScript 1.8阵列reduce方法

[
 "asdfas ad sfa", 
 "asdfa dfas fasd", 
 "adf adfasd sdfasf adfdf"
].reduce( function ( m , r ){
    var splitted = r.split(/'W+/g);
    if ( splitted.length > 1 ){
        m.push( splitted[splitted.length-2] );
    }
    return m;
},[]);

试试这个:

bar = foo.map(function(el){
   return el.match(/^.*?('w+)'s'w+$/)[1]; 
});

或使用jquery

bar = $.map(foo, function(el, i){
   return el.match(/^.*?('w+)'s'w+$/)[1]; 
});

试试这个。从字符串中获取倒数第二个字符。。

var str = "HELLO WORLD";
var n = str.charAt(str.length-2);
Result is: D