Javascript регулярное выражение для разделения строки в обе стороны - PullRequest
0 голосов
/ 15 февраля 2012
    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)

Единственное, чего не хватает, так это того, что я не знаю регулярных выражений> _ <</p>

Мне нужно разбить строку "5h55m55s" на ['5','h','55','m','55','s'] вместо ['5', 'h55', 'm55', 's'], что нарушает мой код.О да, и функция _GET не важна, она просто получает строку из URL, как переменная $ _GET php

Так что, очевидно, регулярное выражение /(?=[hms])/ не работает полностью, и мне нужно знать, какполучить его для разделения как на «левый», так и «правый» из h, m и s

По сути, ответом на этот вопрос является регулярное выражение, которое разделяет, например, "55m55s" в массив ['55','m','55','s']

Ответы [ 5 ]

3 голосов
/ 15 февраля 2012

Вы могли бы что-то вроде ...

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

jsFiddle .

Это будет время падения 0.Если это возможно, измените тело filter() на return a.length.

1 голос
/ 15 февраля 2012
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 голосов
/ 28 мая 2013

Ух ты, я прошел долгий путь.

Мне пришлось реализовать что-то подобное некоторое время назад, и ответ на самом деле очень прост.Тем не менее, он напомнил мне об этом вопросе.

Итак, чтобы ответить на мой собственный вопрос, вот что я приготовил:

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
0 голосов
/ 15 февраля 2012

Чтобы сделать это с помощью регулярного выражения:

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 голосов
/ 15 февраля 2012
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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...