3 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
(?=^.{6,7}$)^(([0-9] ?){4}( ?[a-zA-Z]){2})$
將匹配
第1111章
111 1ZZ
1 111ZZ
1111ZZ
第1111章
但不是
9999 1A
11111Z
1111111
11 11 ZZ
https://regex101.com/r/lByOx6/1
編輯:解釋
“積極前瞻”部分:
(?=^.{6,7}$)
這僅在字符串滿足要求時(shí)才匹配,但它不會(huì)“消耗”字符。. 是任何字符
{6,7} 是關(guān)于重復(fù)
如果字符串有 6 個(gè)或 7 個(gè)字符,則匹配so (?=^.{6,7}$)
,無(wú)論如何
然后下面的部分已經(jīng)“消耗”了字符串,說(shuō)我想要在開(kāi)始時(shí)重復(fù) 4 次數(shù)字和可選的空格,在結(jié)束時(shí)重復(fù) 2 次字母和可選的空格。第二部分將接受諸如此類的字符串,1 1 1 1 Z Z
但由于這些字符串超過(guò) 7 個(gè)字符,因此第一部分不會(huì)讓字符串匹配。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
我建議通過(guò)減少所有你似乎不感興趣的空格來(lái)提前簡(jiǎn)化問(wèn)題:
var candidate = input.replaceAll(/\s/mg, '');
那么正則表達(dá)式就是:/^\d{4}[A-Za-z]{2}$/
但是,如果您需要驗(yàn)證實(shí)際上沒(méi)有前導(dǎo)或尾隨空格,您可以提前驗(yàn)證并立即返回否定結(jié)果。

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
另一種選擇是檢查字符串是否在第一個(gè)和最后一個(gè)非空白字符之間包含可選空格。
然后匹配第一個(gè)數(shù)字后跟由可選空格分隔的 3 位數(shù)字和 2 或 3 倍的字符 a-zA-Z 或空格。
使用不區(qū)分大小寫的匹配:
^(?=\S+ ?\S+$)\d(?: ?\d){3}[A-Z ]{2,3}$
解釋
^
字符串的開(kāi)始(?=
正面前瞻,斷言右邊是什么\S+ ?\S+$
匹配第一個(gè)和最后一個(gè)非空白字符之間的可選空格)
關(guān)閉前瞻\d(?: ?\d){3}
匹配一個(gè)數(shù)字并重復(fù) 3 次可選空格和一個(gè)數(shù)字[a-zA-Z ]{2,3}
匹配 2-3 次字符 a-zA-Z 或空格$
字符串結(jié)束
添加回答
舉報(bào)