JavaScript Regular Expression最后一场比赛

时间:2014-09-12 08:00:49

标签: javascript regex

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

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

a可能类似于c*1uc*2uc*1tc*2tc*1uc*1t。如果a"c761uc201t",则在这种情况下也期望获得"20"

任何提示如何编写正则表达式以获取20

2 个答案:

答案 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