javascript - 正则表达式将字符串的开头与设置的结尾相匹配

标签 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

有人有什么想法吗?

最佳答案

问题是 .* 可以消耗整个字符串(并且它会)。最简单的修复方法是使重复变得不贪婪,并要求字符串结尾位于可选的 _ 结尾之后:

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

这样,如果应排除结尾字符,.* 将不会消耗它们。

Working demo.

作为一个小的优化,您可以避免捕获组(如果不需要它)并使用字符类作为单字符结尾:

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

关于javascript - 正则表达式将字符串的开头与设置的结尾相匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256837/

相关文章:

java - 正则表达式在 String.matches() 中不起作用

javascript - 追加 .eq() 导致重复

javascript - 如何将类属性应用于 HTML 字符串(未呈现在文档上)

php - PHP中的preg_replace按组

java - 使用 RegEx 查找两个 XML 标记之间的所有内容

regex - 如何在正则表达式中匹配多行中的任意字符?

javascript - 使用 add :true parameter 获取集合时重新渲染主干 View

javascript - 如何从数组中获取随机值?

javascript - 使用 "+"符号快速解析 queryParams

C++11 正则表达式细节