我有这个正则表达式the _ is the whitespace
^([a-z]{4}+)?_([A-Z]{4}+)?_(\d{4}+)?$
允许alpha_BETA_1920
,我希望它也允许以下值
alpha
BETA
1920
alpha_BETA
alpha_1920
BETA_1920
问题是_
是静态的,因此上面的所有值都是false
,而我的RegEx将下一个false
值视为true
alpha__
_BETA_
__1920
alpha_BETA_
alpha__1920
_BETA_1920
P.S。我的实际RegEx
包含的内容超过6 words
,而不是3 words
。
_
不是一个实际的下划线,用替换它,我用它是因为``不允许我在文本的开头或结尾使用它。
答案 0 :(得分:1)
模式:/\b[a-z]+(?:_[A-Z]+)?(?:_\d+)?\b|\b(?:[a-z]+_)?(?:[A-Z]+_)?\d+\b|\b[A-Z]+\b/
它从正面匹配,或从字符串背面匹配,或者匹配中间。请参阅demo for visual。
或者代替wordboundaries,您可以使用锚点来提高速度:
模式:
/^[a-z]+(?:_[A-Z]+)?(?:_\d+)?$|^(?:[a-z]+_)?(?:[A-Z]+_)?\d+$|^[A-Z]+$/
或者在非捕获组周围只有2个锚点:
/^(?:[a-z]+(?:_[A-Z]+)?(?:_\d+)?|(?:[a-z]+_)?(?:[A-Z]+_)?\d+|[A-Z]+)$/
答案 1 :(得分:0)
尝试将整个“字母加下划线”子模式封装到一个组中并应用?
量词。此外,该号码不应该是可选的,是吗?
^([a-z]+_)?([A-Z]+_)?(\d+)$