Javascript 正则表达式匹配以某些字符结尾但不以这些字符的特定组合结尾的字符串

标签 javascript regex

假设使用 Javascript,我想匹配以 [abcde]* 但不是以 abc 结尾的字符串。

因此正则表达式应该匹配 xxxaxxxbcxxxabd 但不匹配 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/

相关文章:

javascript - 设置间隔和清除间隔

javascript - 使用 Backbone 路由器回调突出显示所选项目

javascript - 如何设置向后选择?

java - 如何为以 3 个数字或连字符结尾的字符串编写正则表达式模式?

javascript - 如何使用嵌套数组在javascript中使用第一个数组作为对象并将数组的其余部分作为值来形成对象

JavaScript - 函数调用后的垃圾收集

regex - First Re 不能为空

仅当组匹配时正则表达式替换字符

regex - 正则表达式 : Changing part of a line starting with a character

arrays - 在 Postgresql 中为文本数组设置检查约束