2017-09-05 1 views
2

私はページからURLを掻いて、正規表現を使って2つの文字列の間でテキストを取得するコードをいくつか持っています。私がそれをすると、私が望むマッチが得られますが、結果にアクセスすることはできません。JS Regexの結果にアクセスできない - nullのプロパティ '1'を読み取ることができません

evaluated.forEach(function(element) { 
    console.log(element.match(/.com\/(.*?)\?fref/)[1]); 
}, this); 

私は[1]を削除すると、私のように、コンソールに結果を参照してください。

[ 
    '.com/jkahan?fref', 
    'jkahan', 
    index: 20, 
    input: 'https://www.example.com/jkahan?fref=pb&hc_location=friends_tab' 
] 

しかし、私は私が望む結果にアクセスするために[1]を追加するときに、私が取得:

TypeError: Cannot read property '1' of null.

答えて

3

これは配列evaluatedのすべての要素に対して実行されたようです。私の推測では、これらの要素の1つが一致しないと、その場合、matchnullを返すため、エラーをスローします。

matchの結果を変数に格納する方がよいでしょう。

evaluated.forEach(function(element) { 
    var result = element.match(/.com\/(.*?)\?fref/); // store the result of 'match' in the variable 'result' 
    if(result)          // if there is a result (if 'result' is not 'null') 
     console.log(result[1]);      // then you can access it's [1] element 
}, this); 
+0

奇妙だ:それはそれの[1]にアクセスする前にnullかでなければそのように、あなたは確認することができます。同じif文を使用する前に、私はそのようなことを試しました。私は何とかそれを台無しにしているに違いない。それはうまくいった。ありがとう。 – xendi

+0

あなたは大歓迎です!おそらく '[1]'を 'if'の前の行から削除するのを忘れていたでしょう。 –

関連する問題