javascript - 如何优化正则表达式?

标签 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)+.*)?$/
var resTransaction       = new RegExp(regexTransaction,'g').exec(encodedMsg)

console.log(resTransaction)

我非常感谢您的帮助。

最佳答案

这两个看起来都表现得相当不错。第一个假设每个 block 中的数字数量已知(5,6,5)。第二个是原始正则表达式的清理版本,它接受由连字符分隔的任意数量的 3 个数字序列。

// assumes ABC - 5 digits - 6 digits - 5 digits
const regex = /([A-Z]{2,3}-[\d]{5}-[\d]{6}-[\d]{5})/g;

// your original regex with unnecessary stuff stripped out.
// notice that this captures the second item with 999 appended that the first expression doesn't get.
const regex2 = /([A-Z]{2,3}(?:-[0-9]+){3})/g;

const input = "asfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312999afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12345afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-99999-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfdsasfsfdasABC-12312-121231-12312afsasfsdfds";

console.log(input.match(regex));
console.log(input.match(regex2));

关于javascript - 如何优化正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56179333/

相关文章:

python - 在 Python 中使用正则表达式匹配两个字符串中的 HTML 标签

php - 第 222 行警告 : preg_match(): Compilation failed: quantifier does not follow a repeatable item at offset 1 in wp-includes/class-wp. php

javascript - 如何将 &lt;script&gt; 标签放入 <div> 标签中?

javascript - 如何在 PHP 中将 MediaRecorder 流保存到 OGG 文件?包括元数据

javascript - 如何在 moment.js 中将 moment 转换为自定义格式字符串

Ruby 正则表达式 gsub 文本文件中的一行

javascript - 在 promise 中使用这个

javascript - 文本区域字符串 : limit to 1 empty line at a time

regex - 大文件上的多行正则表达式匹配字符串替换

regex - 正则表达式可以返回结构中的键/值对吗?