[英]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.