要搜索字符串a='c761uc762uc201tc202t'
并获取1t
之前的最接近的数字。
期望获得20
,但a.match(/(c*){2,}(.*?)1t/)
获得["c761uc762uc201t", "", "761uc762uc20"]
。
a
可能类似于c*1uc*2uc*1tc*2t
或c*1uc*1t
。如果a
为"c761uc201t"
,则在这种情况下也期望获得"20"
。
任何提示如何编写正则表达式以获取20
?
答案 0 :(得分:2)
这是我对这个问题的看法:
/(\d{2})\dt$/
这将在字符串末尾的任何<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"]
答案 1 :(得分:1)
您可以使用:
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