[英]Regex - match depending of the first character
我正在嘗試創建完美的正則表達式來匹配這些結果:
NC1014 C599
“NC”后跟 4 位數字,或“C”后跟 3 位數字。
我試過這個表達
/^[NC]\d{4}|[C]\d{2,3}$/
但是如果我測試“NC1200”,它就不起作用,它只能識別里面的“C120”。
問題是如果我測試“NC100”它也可以工作,但它不應該。
你有什么主意嗎?
您的正則表達式的問題是|
具有最高優先級,因此起始錨點是第一個分支的一部分,結束錨點是第二個分支的一部分,但它們永遠不會在一起。 此外, [NC]
表示N
或C
,您需要NC
代替。
考慮到這兩個,試試這個:
^(NC\d{4}|C\d{3})$
這個怎么樣?
/^(NC)\d{4}|[C]\d{2,3}$/
/NC[\d]{4}\b|C[\d]{3}\b/gm
完美運行,為什么 C 后面有 2 或 3 位數字? 此外, [NC]
將搜索單個 N 或 C。 請注意,每個匹配都以\b
標志結束,以防止像 NC12345 = NC1234 這樣的匹配。
const rgx = /NC[\d]{4}\b|C[\d]{3}\b/gm; const str = `C23 NC1014 C599 NC1200 C1866`; console.log([...str.matchAll(rgx)].flat());
/N?C\d{3,4}/gm
匹配一行中的兩個表達式(不分組),例如NC1200 C599
/^NC\d{4}|C\d{3}$/gm
匹配行首的NC1200
和行尾的C599
,這可能最接近您的初始嘗試。
順便說一句:你知道regex101.com在哪里可以測試你的正則表達式嗎? 這可能很有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.