2017-06-04 71 views
1

我已經嘗試了一些方法來做到這一點,我無法弄清楚爲什麼我的.match總是返回null。鑑於下面的字符串,我怎樣才能提取2017年6月4日到它自己的變量?Javascript從字符串提取正則表達式

var str = "I need the only the date 04-Jun-2017\n" 

str.replace(/\n/g,' '); 
var date = str.match(/^[01][0-9]-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}$/); 
alert(date) 
+2

拆下錨。請參閱[本演示](https://regex101.com/r/S1Myyy/1)。或者[用字邊界替換](https://regex101.com/r/j9EqhV/1)。 –

回答

3

首先,str.replace(/\n/g,' ');不修改str VAR因爲字符串是不可變的。然後,您不需要錨點^$,因爲日期在字符串內部,它不等於字符串本身。此外,您需要匹配從131的天數,但[01][0-9]僅匹配從0019

您可以考慮使用

var str = "I need the only the date 04-Jun-2017\n" 
 
var date = str.match(/\b\d{1,2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}\b/i); 
 
if (date) { 
 
    console.log(date[0]); 
 
}

錨被替換單詞邊界\b和日部分改爲\d{1,2}匹配任何1位或2位。 i修飾符將使模式不區分大小寫。

+1

你的代碼正是我所需要的。太老實,我甚至都不知道\ b,並且對正則表達式有很少的經驗。我會說我不知道​​字符串是不可變的,因爲你把它放進去了嗎? str.replace(/ \ n/g,'');肯定會刪除新行。我之前的解決方案是用\「\」替換\ n,然後用.split(「」)分割所有的標記,然後循環並使用我的頂起的正則表達式進行匹配。底線,你的方式要好得多。 –

0

起初,你應該更清楚你的問題。 這裏其次就是可能是答案

var str = "I need the only the date 04-Jun-2017\n" 
var result = str.replace('I need the only the ',''); 
alert(result); 

.replace(valueToSearch,valueToReplace)功能如何需要兩個參數,第一個是替代,你把那麼什麼都在它裏面將搜索字符串中的文本,第二個參數是它會替換它的值,所以如果你想擺脫它,只需放置一個空字符串。

+0

謝謝你的回答,你寫的我應該寫得更清楚,而不是匆忙。此外,您的答案不適用於我,因爲圍繞日期的文本會發生變化(我想我沒有指定),因此必須使用RegEx答案。 –