Javascript regexp以两种方式拆分字符串

时间:2012-02-15 02:06:57

标签: javascript regex split

    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的视频技巧(把&amp; t = XhYmZs放到视频中去)

唯一缺少的是我不知道正则表达式&gt; _&lt;

我需要的是将字符串"5h55m55s"拆分为['5','h','55','m','55','s']而不是['5', 'h55', 'm55', 's'],这会破坏我的代码。哦是的,_GET函数不重要,它只是从url获取一个字符串,就像php的$ _GET变量

显然,正则表达式/(?=[hms])/不起作用,我需要知道如何让它在h的“左”和“右”分开,{{1} }和m

基本上,这个问题的答案是一个正则表达式,例如,将s拆分为数组"55m55s"

5 个答案:

答案 0 :(得分:3)

你可以这样......

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

jsFiddle

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

答案 1 :(得分: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"]

答案 2 :(得分: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/

答案 3 :(得分: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字符之前的数字。

答案 4 :(得分: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