Javascript 如何优化正则表达式?
我正在尝试运行以下正则表达式((\s)+.$)([A-Z]{2,3}(?:-[0-9]+){3}))(\s)+.$,但我得到的字符串超时值大约为100多个字符。我在JS中运行了这个正则表达式,还尝试在regex101.com中运行它 我试图匹配的是“ABC-12312-121231-12312”,它可以由任何字符串启动和跟随 以下是我的JS代码:Javascript 如何优化正则表达式?,javascript,regex,Javascript,Regex,我正在尝试运行以下正则表达式((\s)+.$)([A-Z]{2,3}(?:-[0-9]+){3}))(\s)+.$,但我得到的字符串超时值大约为100多个字符。我在JS中运行了这个正则表达式,还尝试在regex101.com中运行它 我试图匹配的是“ABC-12312-121231-12312”,它可以由任何字符串启动和跟随 以下是我的JS代码: const regexTransaction = /^(.*\s)*(([A-Z]{2,3}(?:-[0-9]+){3}))((\s)+.*)?$
const regexTransaction = /^(.*\s)*(([A-Z]{2,3}(?:-[0-9]+){3}))((\s)+.*)?$/
var resTransaction = new RegExp(regexTransaction,'g').exec(encodedMsg)
console.log(resTransaction)
我真的非常感谢您的帮助。这两个功能似乎都相当出色。第一个假设每个块中有已知数量的数字(5、6、5)。第二个是原始正则表达式的清理版本,它接受3个由连字符分隔的任意数字序列
//假设ABC-5位-6位-5位
常量regex=/([A-Z]{2,3}-[\d]{5}-[\d]{6}-[\d]{5})/g;
//你原来的正则表达式去掉了不必要的东西。
//请注意,这捕获了第一个表达式没有得到的第二个附加999的项。
常量regex2=/([A-Z]{2,3}(?:-[0-9]+){3})/g;
常量输入="asfsfdasABC-12312-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312999AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSDFDSASFSFDASBC-12312-121231-12345AFSASSFSDFDSASFSFSFDASBC-12312-121231-12312AFSASSDFDSFSFSFSFSFDASBC-12312-121231-12312AFSASSDFDSFSFSFSFDASBC-12312-12312-12312-12312-121231-12312AFSASSFSDFDSASFSFDASABC-99999-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSFSDFDSASFDASBC-12312-121231-12312AFSASSFSDFDSDSFSFSFSFSDSASBC-12312-121231-12312AFSASSFSDFDSFSFSFSFSFSASBC-12312-12312-12312AFSAFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSDFASBC-12312-12312-12312dsasfsfdasABC-12312-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSFSDFDSFSFSFSFDASBC-12312-121231-12312AFSASSFSDFDSFSFSFSFDASBC-12312-121231-12312-12312AFSASSFSFSFSFSFSFSFSFSFSFSFSFSFSFDASBC-12312-12312-12312-1231221231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSFSDFDSASFSFDASBC-12312-121231-12312AFSASSFSDFDSASFSFSFSDSASBC-12312-121231-12312AFSASSFSDFDSFSDSFSFSFSFSDSASBC-12312-121231-12312AFSASSFSDFDSFSFSFSFSFSFSFSFSFSFSFSFSASBC-12312-12312-12312-12312AFSAFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSFSDS12312-12312-12312-12312-12312SASFFDASABC-12312-121231-12312AFSASFDFDSASFSFDASABC-12312-121231-12312AFSASFDSASFSFDASBC-12312-121231-12312AFSASFDSASFSFSFSFDASBC-12312-121231-12312AFSASFDSASFSFSFSFDASBC-12312-121231-12312AFSASFDSFSFSFSFSFSFDASBC-12312-121231-12312AFSASFDSDSFSFSFSFSFSFSFDASBC-12312-12312-12312-123121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFDASABC-12312-121231-12312AFSASSFSDFDSASFSFSFSFSASABC-12312-12312-121231-12312AFSASSDFDSFSDFDSFSFSFSFSFSASABC-12312asfsfdasABC-12312-121231-12312AFSASFDFDSASFSFDASABC-12312-121231-12312AFSASFDSASFSFDASABC-12312-121231-12312AFSASFDSASDFDS”;
console.log(input.match(regex));
console.log(input.match(regex2));
您需要捕获字符串中的任何内容,还是只需要匹配整个序列?@rayhatfield我想匹配整个序列,但是这个序列ABC-1234-1234-1234
可以后跟任何内容。它也可以以任何内容开头,例如“Lorem ABC-1234-1234-1234 Lorem”“。它总是2-3字母-5位数-6位数-5位数吗?@rayhatfield它将是2-3字母-任意位数-任意位数-任意位数。”