简体   繁体   中英

JavaScript Regular Expression last match

To search in the string a='c761uc762uc201tc202t' and get the closest number before 1t .

Expect to get 20 , but with a.match(/(c*){2,}(.*?)1t/) , I get ["c761uc762uc201t", "", "761uc762uc20"] .

a may be like c*1uc*2uc*1tc*2t or c*1uc*1t . If a is "c761uc201t" , also expect to get "20" in this case.

Any hint how should I write the regular expression to get 20 ?

This is my go on this question:

/(\d{2})\dt$/

This will fetch the number before any <number>t at the end of the string.

>>> 'c761uc762uc201tc202t'.match(/(\d{2})\dt$/);
Array ["202t", "20"]
>>> 'c761uc201t'.match(/(\d{2})\dt$/);
Array ["201t", "20"]

This was the shortest answer I could come up with.

If you want only the one after 1t , try this:

/(\d{2})1t/

This works like this:

>>> 'c761uc762uc201tc202t'.match(/(\d{2})1t/);
Array ["201t", "20"]
>>> 'c761uc201t'.match(/(\d{2})1t/);
Array ["201t", "20"]

You can use:

var r = a.match(/^(?:[^c]*c){1,3}(.*)1t/)[1];
// 20

Or to make it safer:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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