2017-06-04 70 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答案。 –