2012-02-29 14 views
1

私は以前同様の質問をして正しい応答を得ました。今回は、「By」と「Date」の後に別々に名前の2つの変数を取得しようとしていますが、後に、それは文句を言わない拾うの上にダッシュやスペースでjavascript 'space'と 'dash'またはmatchとの正規表現のトリム

<p class="review-rating"> 
By carolyn.fleetwood 
- Feb 11, 2012 
- 
Something.com 
</p> 
<p class="review-rating"> 
By Dont-work 
- Feb 11, 2012 
- 
Something.com 
</p> 
<p class="review-rating"> 
By wont work 
- Feb 11, 2012 
- 
Something.com 
</p> 

$('.review-rating').each(function() { 
    var matches = $(this).text().match(/\s*By\s+([\w.]+)\s*-\s*([\w, ]+)/); 
    alert("Date: " + matches[2] + " | By: " + matches[1]); 
});​ 

以下の試合での問題は、名前にスペースまたはダッシュを持っている場合、それが拾っていないことです"By"。

こちらを参照してくださいjfiddle:http://jsfiddle.net/GYSbR/1/

答えて

1

は、行の残りの部分を想定するとは、それが次の改行まで内容(複数可)の残りの部分をキャッチするだけで[\w.]から[^\r\n]+に切り替えて、自分の名前です。

+0

私はそれが何か単純であることを知っていた、ありがとう。 "次の行まで"を探していたが、これはそれだった。 – ToddN

+0

別のつまずき。 "By"という単語がない場合は、NULLやゼロなどを返す方法がありますか?私は、「By」という単語がない場合(別名「2」)、「By」という単語が含まれていないと、日付を取得したいだけですか? – ToddN

+1

グループにまとめますか? '(?:By \ s +)?'それがあれば 'By \ s +'にマッチします。そうでなければ無視します。 –

1

答えはたぶんドットマッチャーを使用することです。これは、デフォルトの場合に改行を除いてすべて一致します。

唯一の注意点は、ある行がある場合は、「行」行に後続の空白を取り込む可能性があることです。その周りに一つの方法:

.match(/\s*By\s+(.*\S)\s*-\s*([\w, ]+)/) 

ここ.*\Sは、大きく「非空白のない新しい行で終わる一個の以上の文字を一致させる」ために変換されます。