时间字符串上的Javascript split()

时间字符串上的Javascript split(),javascript,arrays,string,split,Javascript,Arrays,String,Split,我有一个字符串,可以采用以下格式(数字是示例): 我本来打算使用带有正则表达式的split()来匹配h、m和s。但是,如果只存在一些度量,那么这将失败(如果它的形式是2m3s,那么我需要一种方法来知道数组中的第一个条目表示分钟而不是小时) 我假设正确的解决方案将涉及某种类型的正则表达式,但我无法理解它。有没有干净高效的解决方案 编辑: (我想接受任意数量的数字,所以我没有在正则表达式中使用{1,2}) var timeString = $('#interval').val(); var hour

我有一个字符串,可以采用以下格式(数字是示例):

我本来打算使用带有正则表达式的
split()
来匹配
h
m
s
。但是,如果只存在一些度量,那么这将失败(如果它的形式是
2m3s
,那么我需要一种方法来知道数组中的第一个条目表示分钟而不是小时)

我假设正确的解决方案将涉及某种类型的正则表达式,但我无法理解它。有没有干净高效的解决方案

编辑:

(我想接受任意数量的数字,所以我没有在正则表达式中使用
{1,2}

var timeString = $('#interval').val();
var hours = timeString.match('/\d+(?=h)/')[0];     // 2h4m8s
var minutes = timeString.match('/\d+(?=m)/')[0];
var seconds = timeString.match('/\d+(?=s)/')[0];
console.log('hours: ' + hours);
console.log('minutes: ' + minutes);
console.log('seconds: ' + seconds);

控制台正在为值提供
null

您可以使用以下正则表达式:

\d+(?=m)
分钟

\d+(?=h)
数小时,以及

\d+(?=s)


您可能应该进行不区分大小写的匹配。

您可以在此处使用带有正lookaheads的正则表达式:

/\d{1,2}(?=h)/
将匹配小时数:后跟字母
h
时为一个或两个数字。类似于
m
s

var string = "23h4m"
var regexp = /(\d+h)?(\d+m)?(\d+s)?/;
var result = string.match(regexp) // gives you ["23h4m", "23h", "4m", undefined]

您可以使用
result[1]
访问结果数小时,
result[2]
访问结果数分钟,以及
result[3]
秒。如果没有给出值,则值是未定义的。

您可以在此处使用带有lookaheads的正则表达式。@Christoph,感谢您的提示,我以前从未遇到过这些,但现在学习也不会太晚。我带着手机,但我添加了一个简短的答案。
12H34M3S3s.match(/\d{1,2}(?=h)/)
可以为我提供小时数。也许你一开始就没有从DOM元素中获取字符串?啊,没错。我忽略了这一点。Regex是文本,你永远不需要引用它们。Regex文本是文本。但是在使用
RegExp
构造函数时,你必须在它们周围加引号。
/
表示它是一个文本。(只是吹毛求疵)只是吹毛求疵:文本从未被引用。您在RegExp构造函数中引用的是一个普通字符串;)但是您是对的,您可以使用正则表达式作为字符串并引用它,或者使用文本形式
/
@Christoph:我没有这样做!事实上,我从未投过反对票。我今天刚刚达到了要求的声誉。很抱歉指责你,我猜是这里的另一个人,把我们俩都投了反对票。@Christoph:我原谅你。对你的答案投赞成票所表现出的诚意:)当然是最简单的解决办法。
//match any digits and include the letters

var rx=/((\d+)(h|m|s))/g;    

//test:
var str1='2h34m2s',str2='23m6s';

str1+'=\n\t'+str1.match(rx).join(':\n\t')+'\n'+
str2+'=\n\t'+str2.match(rx).join(':\n\t')
//returns

2h34m2s=
    2h:
    34m:
    2s
23m6s=
    23m:
    6s
//match any digits and include the letters

var rx=/((\d+)(h|m|s))/g;    

//test:
var str1='2h34m2s',str2='23m6s';

str1+'=\n\t'+str1.match(rx).join(':\n\t')+'\n'+
str2+'=\n\t'+str2.match(rx).join(':\n\t')
//returns

2h34m2s=
    2h:
    34m:
    2s
23m6s=
    23m:
    6s