繁体   English   中英

JavaScript正则表达式最后匹配

[英]JavaScript Regular Expression last match

要搜索字符串a='c761uc762uc201tc202t'并获得1t之前的最接近数字。

期望得到20 ,但是使用a.match(/(c*){2,}(.*?)1t/) ,我得到["c761uc762uc201t", "", "761uc762uc20"]

a可能像c*1uc*2uc*1tc*2tc*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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM