假设使用 Javascript,我想匹配以 [abcde]*
但不是以 abc
结尾的字符串。
因此正则表达式应该匹配 xxxa
、xxxbc
、xxxabd
但不匹配 xxxabc
。
我很困惑。
编辑:出于某种原因我必须使用正则表达式,我无法做某事if (str.endsWith("abc"))
最佳答案
解决方案很简单:使用否定前瞻:
(?!.*abc$)
这断言字符串不以 abc
结尾。
你提到你还需要字符串以 [abcde]*
结尾,但是 *
意味着它是可选的,所以 xxx
火柴。我假设您真的想要 [abcde]+
,这也只是意味着它需要以 [abcde]
结尾。在那种情况下,断言是:
(?=.*[abcde]$)(?!.*abc$)
参见 regular-expressions.info有关正面和负面环视的教程。
我不愿意给出实际的 Javascript 正则表达式,因为我不熟悉这种语言(尽管我相信断言如果支持的话会起作用——根据 regular-expressions.info,Javascript 支持正向和负向前瞻) .感谢 Pointy 和 Alan Moore 的评论,我认为正确的 Javascript 正则表达式是这样的:
var regex = /^(?!.*abc$).*[abcde]$/;
请注意,此版本(归功于 Alan Moore)不再需要正面前瞻。它只是匹配 .*[abcde]$
,但首先断言 ^(?!.*abc$)
。
关于Javascript 正则表达式匹配以某些字符结尾但不以这些字符的特定组合结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601087/