改进向前看正则表达式
Improve lookahead regex
我有一个像这样的日期字符串,
'2015-09-24T03:45:19-0700 +0530'
我正在提取如下的日期和时间
match(/[0-9]+:+[0-9]+:[0-9]+(?=.*?-)/) // returns 03:45:19
match(/[0-9]+-+[0-9]+-[0-9]+(?=.*?T)/) // returns 2015-09-24
是否有改进上述正则表达式的方法?
编辑:当我尝试new Date('2015-09-24T03:45:19-0700 +0530')
时,它说无效日期,因为这是本地化日期。那是我尝试用正则表达式来评估另一种方法的时候。现在我确定用" "
代替"T"
,用new Date
。
您可以对空间进行分割,并使用Date.parse()
来获得所需的结果:
yourDate = new Date(Date.parse('2015-09-24T03:45:19-0700 +0530'.split(' ')[0]))
"T"
被Date.parse()
正确解释。
您可以使用任何日期方法
Regex在这里是多余的。您可以使用substr
和split
(假设字符串的格式相同)
- 从字符串 中删除毫秒和时区
- 按
T
拆分结果字符串
var str = '2015-09-24T03:45:19-0700 +0530';
var arr = str.substr(0, str.lastIndexOf('-')).split('T');
var date = arr[0],
time = arr[1];
document.getElementById('output').innerHTML = 'Date = ' + date + ' <br />Time = ' + time;
<pre id="output"></pre>
编辑
lastIndexOf
将不适用于负时区,例如-530
。在这种情况下,您可以使用匹配-
的regex,后面跟着四位数字来分割字符串。
var str = '2015-09-24T03:45:19-0700 -0530';
var arr = str.split(/-'d{4}/)[0].split('T');
var date = arr[0],
time = arr[1];
document.getElementById('output').innerHTML = 'Date = ' + date + ' <br />Time = ' + time;
<pre id="output"></pre>
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 改进向前看正则表达式
- js 正则表达式提取字母之间的空格.积极的回头看
- 正则表达式,用于不处理点后面的数字的正向前看千位分隔符
- 为什么这三个正则表达式会拆分字符串差异,尽管它们看起来是等效的
- 当字符串包含两个非连续的正斜杠(负向前看)时返回false的正则表达式
- Javascript贪婪正则表达式看起来不贪婪