2012-02-29 27 views
1

我之前問過類似的問題,得到了正確的回答。這次雖然我寧願嘗試在「By」和「Date」之後分別獲得名稱的兩個變量。javascript正則表達式修剪爲'空格'和'短劃線'或匹配

與下面的比賽的問題是,它不拿起如果名稱中有空格或它破折號:

<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]); 
});​ 

隨着後上面它不會拿起破折號或空格「通過」。

看到這裏jfiddle:http://jsfiddle.net/GYSbR/1/

回答

1

假設行的其餘部分是他們的名字,從[\w.][^\r\n]+只需切換,因此捕捉的內容(S),直到下一個新行的其餘部分。

+0

我知道這很簡單,謝謝。正在尋找「到下一線」,這是做到了。 – ToddN 2012-02-29 02:37:49

+0

另一個呃逆。如果單詞「By」不在那裏,有沒有一種方法可以返回NULL或零或其他名稱?如果不包含「By」,如果單詞「By」不存在(又名匹配[2]),我只想拉日期? – ToddN 2012-02-29 04:36:49

+1

將它包裝在一個組中? '(?:By \ s +)?'然後它會嘗試匹配'By \ s +'(如果它在那裏),否則忽略它。 – 2012-02-29 04:41:08

1

答案可能只是使用點匹配器:它匹配除默認情況下的新行以外的所有內容。

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

唯一需要注意的是它可能會捕獲「By」行上的一些尾隨空格,如果有的話。圍繞一個方法:

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

這裏.*\S大致翻譯爲「匹配以非空格,沒有新行結束一個或多個字符」。

相關問題