3 回答

TA貢獻2012條經驗 獲得超12個贊
(?=^.{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}$)
這僅在字符串滿足要求時才匹配,但它不會“消耗”字符。. 是任何字符
{6,7} 是關于重復
如果字符串有 6 個或 7 個字符,則匹配so (?=^.{6,7}$)
,無論如何
然后下面的部分已經“消耗”了字符串,說我想要在開始時重復 4 次數字和可選的空格,在結束時重復 2 次字母和可選的空格。第二部分將接受諸如此類的字符串,1 1 1 1 Z Z
但由于這些字符串超過 7 個字符,因此第一部分不會讓字符串匹配。

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

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