簡體   English   中英

正則表達式 - 匹配取決於第一個字符

[英]Regex - match depending of the first character

我正在嘗試創建完美的正則表達式來匹配這些結果:

NC1014 C599

“NC”后跟 4 位數字,或“C”后跟 3 位數字。

我試過這個表達

/^[NC]\d{4}|[C]\d{2,3}$/

但是如果我測試“NC1200”,它就不起作用,它只能識別里面的“C120”。
問題是如果我測試“NC100”它也可以工作,但它不應該。

你有什么主意嗎?

您的正則表達式的問題是| 具有最高優先級,因此起始錨點是第一個分支的一部分,結束錨點是第二個分支的一部分,但它們永遠不會在一起。 此外, [NC]表示NC ,您需要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM