2012-02-15 59 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 
相關問題