假设我有一个字符串列表,例如:
foo = ["asdfas ad sfa", "asdfa dfas fasd", "adf adfasd sdfasf adfdf"];
现在我想要一个映射,将该数组映射到每个字符串的倒数第二个单词的列表中:
bar = ["ad", "dfas", "sdfasf"];
我知道我可以使用 regex 找到它们/(\w+)\s\w+$/
,但是如何使用找到的结果来执行映射?
假设我有一个字符串列表,例如:
foo = ["asdfas ad sfa", "asdfa dfas fasd", "adf adfasd sdfasf adfdf"];
现在我想要一个映射,将该数组映射到每个字符串的倒数第二个单词的列表中:
bar = ["ad", "dfas", "sdfasf"];
我知道我可以使用 regex 找到它们/(\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")});
没错,地图就是你需要的
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 仍然是全局的(这不是错误),第二个元素现在只有两个词要检查
尝试这个 。我使用了 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