Javascript正则表达式来双向分割字符串
var REGEX = new RegExp("(?=[hms])g") var TIME = _GET('t', '0').split(REGEX) var hours = TIME[TIME.indexOf('h')-1] var minutes = TIME[TIME.indexOf('m')-1] var seconds = TIME[TIME.indexOf('s')-1] var HOURS = hours?('hours: '+hours):'' var MINUTES = minutes?('minutes: '+minutes):'' var SECONDS = seconds?('seconds: '+seconds):'' document.write('TIME RECIEVED:<br><br>'+HOURS+'<br>'+MINUTES+'<br>'+SECONDS)
这是整个代码。基本上,我想看看我是否能模拟天生YouTube的视频特技(把& T = XhYmZs去那个时候在视频)Javascript正则表达式来双向分割字符串
唯一缺少的事情是,我不知道正则表达式> _ <
我需要的是将字符串"5h55m55s"
拆分为['5','h','55','m','55','s']
而不是['5', 'h55', 'm55', 's']
,这会破坏我的代码。哦,是的,_GET函数是不重要的,它只是从URL获得一个字符串,如PHP的$ _GET变量
因此很显然,正则表达式/(?=[hms])/
不完全工作,我需要知道如何让它分裂无论在“左”和h
,m
“正确的”,并s
基本上,这个问题的答案是,拆分,例如正则表达式,"55m55s"
入阵['55','m','55','s']
你可以像...
var parts = "5h55m55s"
.split(/(\d+)/).filter(function(a) { return a; });
// ["5", "h", "55", "m", "55", "s"]
这会减少0
的时间。如果可能的话,请将filter()
正文更改为return a.length
。
谢谢:DI在浏览器的开发工具('TIME.toString()。split(/(\ d +)/)'''''''','m',55',s,'55']'' – 2012-02-15 02:32:34
[链接](http://jsfiddle.net/hDgre/)这是一个jsfiddle兼容版本的最终脚本。这就像youtube的'&t = XmYs'技巧 – 2012-02-15 02:55:57
time = "5h55m55s";
pattern = /(\d*h)(\d*m)(\d*s)/i
timeArry=time.match(pattern);
console.log(timeArry.splice(1,3)); //Output ["5h", "55m", "55s"]
这不是我想要做的:/ – 2012-02-15 02:38:15
var pieces = "55m55s".match(/\d+|[hms]/g);
// ["55", "m", "55", "s"]
var pieces = "5h55m55s".match(/\d+|[hms]/g);
// ["5", "h", "55", "m", "55", "s"]
要使用正则表达式做到这一点:
var regex = /(\d+)h(\d+)m(\d+)s/g
var time = _GET('t', '0').match(regex)
var hours = time[0]
var minutes = time[1]
var seconds = time[2]
var HOURS = hours ? ('hours: ' + hours) : ''
var MINUTES = minutes ? ('minutes: ' + minutes) : ''
var SECONDS = seconds ? ('seconds: ' + seconds) : ''
document.write('time RECIEVED:<br><br>' + HOURS + '<br>' + MINUTES + '<br>' + SECONDS)
(\d+)h
发现,先于文字h
字符位数。
(\d+)m
找到位于字面m
字符前面的数字。
(\d+)s
找到字面s
字符前面的数字。
哇,我走了很长的一段路。
我不得不在一段时间内实现这样的事情,答案其实很简单。尽管如此,它让我想起了这个问题。
因此,要回答我的问题,这是我熟了起来:
function parseTime(t){
var h = RegExp('([0-9]*)h').exec(t),
m = RegExp('([0-9]*)m').exec(t),
s = RegExp('([0-9]*)s').exec(t),
a = [];
if(h){
a.push('Hours: '+h[1]);
}
if(m){
a.push('Minutes: '+m[1]);
}
if(s){
a.push('Seconds: '+s[1]);
}
return a;
}
parseTime('1h23m45s'); // ['Hours: 1', 'Minutes: 23', 'Seconds: 45']
parseTime('1h45s'); // ['Hours: 1', 'Seconds: 45']
parseTime('2m') // ['Minutes: 2']
它的简洁和动感。另外,读出来是非常简单:
var _time = parseTime('12m14s');
console.log(_time.join('\n'));
它打印
Minutes: 12
Seconds: 14
[链接](http://jsfiddle.net/Um2cw/1/)这里是_GET功能我用,如果你很好奇。它的用法如下:'_GET('q','no value returned')'。如果你输入'?在地址栏中输入“q = john doe”,它会返回'“john%20doe”',可以通过改变'_GET('q','no value returned')来轻松修复。replace(/%20/g, '')'(将返回'“john doe”')。函数中的第二个参数允许默认(没有在地址栏中输入),在这种情况下,它会返回''没有返回值'。我觉得这是一个非常方便的功能:P – 2012-02-15 02:25:00
没有给出理由的下调是无建设性的,浪费了双方的声誉。这个问题发布于5年前。是的,它写得很差,但你期望我对它做些什么*现在*?重写它?那会有什么好处呢?这个问题比写作的方式有更多的问题。删除它?这不是很好的做法 - 如果有人觉得它有用,该怎么办?我想从5年前的问题中学到什么课? – 2017-12-02 06:49:49