正则表达式-可以包含字符但不能以字符结尾的查找模式(javascript)?
我对正则表达式一无所知。我试图为我的案子找到答案,但惨败了。我尝试了许多我发现的想法,但都不管用 我有一个特殊的重复模式,我试图匹配,我做了大部分,因为我找不到确切的解决方案。这就是我所做的: 我的正则表达式正则表达式-可以包含字符但不能以字符结尾的查找模式(javascript)?,javascript,regex,Javascript,Regex,我对正则表达式一无所知。我试图为我的案子找到答案,但惨败了。我尝试了许多我发现的想法,但都不管用 我有一个特殊的重复模式,我试图匹配,我做了大部分,因为我找不到确切的解决方案。这就是我所做的: 我的正则表达式 /((([a-zA-IK-Z][a]?)[\d]{1,3}[a-zA-Z]?)(-)?){1,}/g 我的模式: Aa200-B300-M52A-G5-Aa50 match (expected) Aa200-B300-M52A-G5-A doesn't match (exp
/((([a-zA-IK-Z][a]?)[\d]{1,3}[a-zA-Z]?)(-)?){1,}/g
我的模式:
Aa200-B300-M52A-G5-Aa50 match (expected)
Aa200-B300-M52A-G5-A doesn't match (expected)
Aa200-B300-M52A-G5-Aa doesn't match (expected)
对于这些情况,它工作得非常好,但我希望它与下一个示例不匹配:
Aa200-B300-M52A- (ending with -)
实现这一点的正确方法是什么?您可以使用以下模式:
/^[a-zA-IK-Z]a?\d{1,3}[a-zA-Z]?(?:-[a-zA-IK-Z]a?\d{1,3}[a-zA-Z]?)*$/gm
通过在重复非捕获组开始时放置<代码> -/COD>,我们确保<代码> ->代码>只发生在中间,但不在结尾。
< p>您可以试试这个。它定义了如果有下一个组,那么在它前面应该有一个“-”。我还将您的数字组从{1,3}更改为{0,3},因为您期望的匹配项中并不总是有数字(第二种和第三种情况)。希望这有帮助const regex=/^([a-zA-IK-Z]a?[\d]{0,3}[a-zA-Z]?)(([a-zA-IK-Z]a?[\d]{0,3}[a-zA-Z]?)*$/;
console.log(“应该匹配”);
控制台日志(“Aa200-B300-M52A-G5-Aa50”。匹配(regex));
控制台日志(“Aa200-B300-M52A-G5-A”。匹配(regex));
控制台日志(“Aa200-B300-M52A-G5-Aa”。匹配(regex));
console.log(“不应匹配”);
console.log(“Aa200-B300-M52A-G5-”.match(regex))代码>我看到您的和@rje的regex模式都能完成这项工作。你们中的一个或两个能向我解释一下这种解决方案的优点是什么吗?谢谢。我不知道其他正则表达式(当前形式)如何为您工作。它需要开始锚和结束锚才能工作。即使添加锚点,正则表达式也非常长且效率低下。与我的167个输入相同,好吧,我现在明白它是如何更好。谢谢你的帮助。