Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式-可以包含字符但不能以字符结尾的查找模式(javascript)?_Javascript_Regex - Fatal编程技术网

正则表达式-可以包含字符但不能以字符结尾的查找模式(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个输入相同,好吧,我现在明白它是如何更好。谢谢你的帮助。