0

次のような文字列のリストがあるとします。

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

ここで、この配列を各文字列の最後から 2 番目の単語のリストにマップするマッピングが必要です。

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

正規表現を使用してそれらを見つけることができることはわかって/(\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]});

最後から2番目の単語がない場合、エラーがスローされます。これは私のニーズを満たします。そしてもちろん、最後から 2 番目の単語が見つからないときに文字列を変更しないでおきたい場合は、次のようにします。

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 はまだグローバルであり (バグではありません)、2 番目の要素にはチェックする単語が 2 つしかありません

非常に新しいデモ

于 2013-07-01T06:02:39.777 に答える
1

これを試して 。JavaScript 1.8 Arrayreduceメソッドを使用しました

[
 "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

これを試して。文字列から最後から 2 番目の文字を取得します。

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

Result is: D
于 2013-07-01T05:55:05.627 に答える