0

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

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

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

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

我知道我可以使用 regex 找到它们/(\w+)\s\w+$/,但是如何使用找到的结果来执行映射?

4

5 回答 5

3

我想使用正则表达式替换

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")});
于 2013-07-01T06:13:27.060 回答
2

没错,地图就是你需要的

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);

又忘了演示

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

foo 仍然是全局的(这不是错误),第二个元素现在只有两个词要检查

非常新的演示

于 2013-07-01T06:02:39.777 回答
1

尝试这个 。我使用了 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;
},[]);
于 2013-07-01T05:56:20.327 回答
-1

尝试这个:

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]; 
});
于 2013-07-01T05:55:42.657 回答
-4

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

var str = "HELLO WORLD";
var n = str.charAt(str.length-2);

Result is: D
于 2013-07-01T05:55:05.627 回答