簡體   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