[英]JavaScript Regular Expression last match
要搜索字符串a='c761uc762uc201tc202t'
并获得1t
之前的最接近数字。
期望得到20
,但是使用a.match(/(c*){2,}(.*?)1t/)
,我得到["c761uc762uc201t", "", "761uc762uc20"]
。
a
可能像c*1uc*2uc*1tc*2t
或c*1uc*1t
。 如果a
为"c761uc201t"
,则在这种情况下也期望得到"20"
。
任何提示我应该如何写正则表达式以获得20
?
这是我对这个问题的看法:
/(\d{2})\dt$/
这将获取字符串末尾任何<number>t
之前的<number>t
。
>>> 'c761uc762uc201tc202t'.match(/(\d{2})\dt$/);
Array ["202t", "20"]
>>> 'c761uc201t'.match(/(\d{2})\dt$/);
Array ["201t", "20"]
这是我能想到的最短答案。
如果您只想要1t
之后的那个,请尝试以下操作:
/(\d{2})1t/
这是这样的:
>>> 'c761uc762uc201tc202t'.match(/(\d{2})1t/);
Array ["201t", "20"]
>>> 'c761uc201t'.match(/(\d{2})1t/);
Array ["201t", "20"]
您可以使用:
var r = a.match(/^(?:[^c]*c){1,3}(.*)1t/)[1];
// 20
或使其更安全:
var r = (a.match(/^(?:[^c]*c){1,3}(.*)1t/) || [null, null])[1];
// 20
a='c*1uc*2uc*1tc*2t';
var r = (a.match(/^(?:[^c]*c){1,3}(.*)1t/) || [null, null])[1];
// *
a='c*1uc*1t'
r = (a.match(/^(?:[^c]*c){1,3}(.*)1t/) || [null, null])[1]
// null
a="c761uc201t";
r = (a.match(/^(?:[^c]*c){1,3}(.*)1t/) || [null, null])[1]
// 20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.