寻找将匹配字符串开头减去以下设置结尾之一的任何内容的正则表达式:
_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
有人有什么想法吗?
最佳答案
问题是 .*
可以消耗整个字符串(并且它会)。最简单的修复方法是使重复变得不贪婪,并要求字符串结尾位于可选的 _
结尾之后:
.*?(?=(_(A|B|C|ZZ))?$)
这样,如果应排除结尾字符,.*
将不会消耗它们。
作为一个小的优化,您可以避免捕获组(如果不需要它)并使用字符类作为单字符结尾:
.*?(?=(?:_(?:[ABC]|ZZ))?$)
关于javascript - 正则表达式将字符串的开头与设置的结尾相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256837/