2012-02-15 45 views
-1
 
    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])/不完全工作,我需要知道如何让它分裂无论在“左”和hm“正确的”,并s

基本上,这个问题的答案是,拆分,例如正则表达式,"55m55s"入阵['55','m','55','s']

+0

[链接](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

+0

没有给出理由的下调是无建设性的,浪费了双方的声誉。这个问题发布于5年前。是的,它写得很差,但你期望我对它做些什么*现在*?重写它?那会有什么好处呢?这个问题比写作的方式有更多的问题。删除它?这不是很好的做法 - 如果有人觉得它有用,该怎么办?我想从5年前的问题中学到什么课? – 2017-12-02 06:49:49

回答

3

你可以像...

var parts = "5h55m55s" 
    .split(/(\d+)/).filter(function(a) { return a; }); 
    // ["5", "h", "55", "m", "55", "s"] 

jsFiddle

这会减少0的时间。如果可能的话,请将filter()正文更改为return a.length

+0

谢谢:DI在浏览器的开发工具('TIME.toString()。split(/(\ d +)/)'''''''','m',55',s,'55']'' – 2012-02-15 02:32:34

+0

[链接](http://jsfiddle.net/hDgre/)这是一个jsfiddle兼容版本的最终脚本。这就像youtube的'&t = XmYs'技巧 – 2012-02-15 02:55:57

0
time = "5h55m55s"; 
pattern = /(\d*h)(\d*m)(\d*s)/i 
timeArry=time.match(pattern); 
console.log(timeArry.splice(1,3));​ //Output ["5h", "55m", "55s"] 

http://jsfiddle.net/eteuz/

+0

这不是我想要做的:/ – 2012-02-15 02:38:15

1
var pieces = "55m55s".match(/\d+|[hms]/g); 
// ["55", "m", "55", "s"] 

var pieces = "5h55m55s".match(/\d+|[hms]/g); 
// ["5", "h", "55", "m", "55", "s"] 
0

要使用正则表达式做到这一点:

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字符前面的数字。

0

哇,我走了很长的一段路。

我不得不在一段时间内实现这样的事情,答案其实很简单。尽管如此,它让我想起了这个问题。

因此,要回答我的问题,这是我熟了起来:

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 
相关问题