我已经尝试了几种方法来做到这一点,但我不明白为什么我的 .match 总是返回 null。鉴于下面的字符串,我如何将 04-Jun-2017 提取到它自己的变量中?
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)
最佳答案
首先,str.replace(/\n/g,' ');
不会修改 str
var,因为字符串是不可变的。然后,您不需要 anchor ^
和 $
,因为日期在字符串内部,它不等于字符串本身。此外,您需要匹配从 1
到 31
的日期,但是 [01][0-9]
只匹配从 00
到 19
。
你可以考虑使用
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]);
}
anchor 替换为单词边界 \b
并且日期部分更改为 \d{1,2}
匹配任何 1 位或 2 位数字。 i
修饰符将使模式不区分大小写。
关于Javascript 从字符串中提取正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359610/