2016-03-23 25 views
0

私はこの配列の配列を持っているので、それをループしてすべての単語を与えたいが、 "@"、句読点やハッシュタグを取り除きたい。しかし、私の正規表現は配列から単語の一部を完全に取り除いているのですが、私はその理由をよく分かりません。javascript用正規表現

[ [ '@AIMEEE94x', 
     '@Arsenal_Geek', 
     '@Charlottegshore', 
     'shut', 
     'it', 
     'ha' ], 
    [ '"You', 
     'learn', 
     'so', 
     'much', 
     '@MesutOzil1088', 
     'and', 
     '@Alexis_Sanchez"', 
     '-', 
     '@alexiwobi:' ] ] 


    var regex = /\w+/g; 
    var listsb = []; 
    for (i = 0 ; i < tweetsA.length; i++) { 
     for(j = 0; j < tweetsA[i].length; j++){ 

      if (regex.test(tweetsA[i][j])== true){ 
       listsb = listsb.concat(tweetsA[i][j]) 
      }                         

     } 
    } 
    console.log(listsb); 

答えて

1

あなたが他のすべての文字を取り除くしたい場合は、正規表現に対する単なるチェックが十分ではありません。あなたは単語に一致する正確なパターンを見つける必要があります。これは、リスト・アレイの内側に押し込まなければならない(一致が存在する場合)はJavaScript

var str = "@Alexis_Sanchez"; 
var regex = /\w+/g; 
var match = str.match(regex); //match = ['Alexis_Sanchez'] 
var str2 = "@alexwobi:"; 
var match2 = str2.match(regex); //match2 = ['alexwobi'] 

にマッチのこの値を文字列のmatch関数を使用して行われます。

\ wメタ文字は[A-Za-z0-9_]と同じです。だから、あなたのためにアンダースコアを取り除くことはありません。また、単語の途中に\ w以外の文字がある場合、マッチ配列に2つの要素があります。どちらも追加してリストにプッシュする必要があります。

0

これにはString.match()を使用する方が簡単でしょうか?このように:

var regex = /\w+/g; 
var listsb = []; 
for (i = 0 ; i < tweetsA.length; i++) { 
    for(j = 0; j < tweetsA[i].length; j++){ 
    listb.push(tweetsA[i][j].match(regex)); //Will give you string stripped with regex characters.                       
    } 
} 
0

新しいコメントはあなたのコメントの更新に基づいています。このバージョンは見つかったすべての一致をループし、リストに追加します。

var regex = /\w+/g; 
var listsb = []; 
for (i = 0 ; i < tweetsA.length; i++) { 
    for(j = 0; j < tweetsA[i].length; j++) { 
     while((m = regex.exec(tweetsA[i][j])) != null) { 
      listsb = listsb.concat(m[0]); 
     } 
    } 
}