正则表达式匹配字符串的开头与集合结尾与否

时间:2013-08-15 16:09:14

标签: javascript regex

寻找匹配字符串开头减去以下设置结尾之一的正则表达式:

_A
_B
_C
_ZZ

例如:

1. blah         needs to match blah
2. blah_A       needs to match blah
3. blahblah_A   needs to match blahblah
4. blah_D       needs to match blah_D
5. blah_Z       needs to match blah_Z
6. blah_ZZ      needs to match blah
7. blah_Ablah   needs to match blah_Ablah

我尝试过的尝试不成功的是:

.*(?=(_(A|B|C|ZZ)))
  did not match 1,4,5, and 7 correctly

.*([^(_A$)]|[^(_B$)]|[^(_C$)]|[^(_ZZ$)])
  did not match any correctly

使用的正则表达式是javascript

有人有任何想法吗?

1 个答案:

答案 0 :(得分:3)

问题是.*可以使用整个字符串(它会)。最简单的解决方法是使重复不成熟,并在可选的_结尾后要求字符串结束:

.*?(?=(_(A|B|C|ZZ))?$)

这种方式.*如果要排除它们,则不会使用结束字符。

Working demo.

作为次要优化,您可以避免捕获组(如果您不需要它)并使用字符类来表示单字符结尾:

.*?(?=(?:_(?:[ABC]|ZZ))?$)