如何在Javascript/jQuery中通过RegExp搜索顺序出现的多个模式?

如何在Javascript/jQuery中通过RegExp搜索顺序出现的多个模式?,javascript,jquery,regex,search,Javascript,Jquery,Regex,Search,想象一个案例,搜索一个包含1000个a、B、C、D、E序列的非常大的文件。请注意,a-E是有序的,E永远不会出现在a之前。我可以使用四个基本的RegExp语句匹配1000次,每个a、每个B、每个C、每个D或E从第一个到最后读取整个文件5次。但是,它会产生大量的开销,并且应该是低效的。我只需要能够读取整个文件一次。对于1000组A、B、C、D、E中的每一组,我希望首先找到A,然后继续读取文件以匹配B、C、D和E,然后再次A、B、C、D、E,仅在一次内结束所有搜索 请注意,A、B、C、D或E的模式不

想象一个案例,搜索一个包含1000个a、B、C、D、E序列的非常大的文件。请注意,a-E是有序的,E永远不会出现在a之前。我可以使用四个基本的RegExp语句匹配1000次,每个a、每个B、每个C、每个D或E从第一个到最后读取整个文件5次。但是,它会产生大量的开销,并且应该是低效的。我只需要能够读取整个文件一次。对于1000组A、B、C、D、E中的每一组,我希望首先找到A,然后继续读取文件以匹配B、C、D和E,然后再次A、B、C、D、E,仅在一次内结束所有搜索

请注意,A、B、C、D或E的模式不同,不应混合使用。我们不能对所有人使用相同的模式。假设查找A的模式是“/Jac.+/”,对于B是“/\d+/”,对于C是“/[\d\s]+/”等等

让我举个例子。假设一个文本文件包含1000名研究参与者的信息

text=我的名字是A。我今年B岁。我在C班学习,我来自D班,我有E个孩子

以上5句话重复1000次。大概是

text=我的名字是A。我今年B岁。我在C班学习,我来自D班,我有E个孩子。我叫A。我今年B岁。我在C班学习,我来自D班,我有E个孩子。我叫A。我今年B岁。我在C班学习,我来自D班。我有E个孩子

其中,A-E的值在每种情况下都不同

当读取从文件顶部开始时,是否可以使用“|”(或)搜索所有A、B、C、D和E

更新: 下面是我用来匹配代码的代码片段:

var patt = /(?:"tag_A\">[\w\s\:\d\_\-\+\,\']+ | "tag_B\">[\w\s\-\d\,\'\&\;\(\)] + | "tag_C\">[\w\s\-\d\,\'\&\;\(\)] | "tag_D\">\,\s\d+" | "tag_E\">\d+)/ig;
var result = text.match(patt);
当我运行上面的代码时,它只找到所有As。当我洗牌他们的顺序和使用

var patt = /(?:"tag_B\">[\w\s\-\d\,\'\&\;\(\)] + | "tag_A\">[\w\s\:\d\_\-\+\,\']+ | "tag_C\">[\w\s\-\d\,\'\&\;\(\)] | "tag_D\">\,\s\d+" | "tag_E\">\d+)/ig;
var result = text.match(patt);
结果均为As、Bs和Cs。没有Ds就没有Es


通过改变patt中RegExp的顺序,我得到了不同的结果。但是,我不知道是什么造成了这种差异。当我分别匹配它们时,RegExp运行良好,这意味着它们没有错误。

这不是您可能想要的答案,但现在开始

一般来说:

正则表达式是先到先得的命题,按从左到右的顺序阅读。
这并不是说某些发动机不具备进行模糊/部分匹配的能力,
并且可以从右到左进行匹配(*cough*Python)

在任何时候,只有当前搜索位置,没有其他位置。
如果您从该位置提供发动机备选方案,则将独立于
彼此只有当这些备选方案中的一个完全满足特定要求时,位置才会改变
整体状况

正则表达式的作用域也是有限的

这些是regex的租户(支柱)

有了这些信息,您可以将单独的正则表达式组合成一个带有子表达式的正则表达式

您可以从左到右排列子表达式的优先级。
示例:(?:
A1 B1 C1 D1 | A2 B2 C2 D2 | A3 B3 C3 D3

但是,这有一个缺点-如果子表达式不能被优先排序。
问题是,您将遇到重叠匹配的可能性。

而且,在这种情况下,不会给出令人满意的结果

显而易见的问题是。。。你试过了吗?是的,但不起作用。尽管我还在做。你的文件是否被分隔成几行,你可以一行一行地搜索?或者只是一个没有分隔符的巨大文本流?我这样问是因为如果你能在阅读时将输入分解成某种可搜索的单元,那么你就可以在每个可搜索单元上搜索多个模式中的每一个,从而避免多次阅读该文件。该文件是一个html代码,其中包含各种类型的标记和文本。我们可以为此做些什么吗?您需要发布您试图使用的代码以及示例数据。在jsfiddle.net或plnkr.co中进行演示也会有所帮助。没有人会为你写这个汉克,如果我理解正确,我可以用REGEXP代替Ai Di,不是吗?我不知道A-D的常量值,它是用于搜索和获取它们的RegExp。我确实使用了(?:A | B | C | D),但它只匹配其中的3个选项,而不是4个。最初它只匹配其中的2个,然后我改变了顺序,它显示了3个,而不是我必须努力让它匹配所有4个字符串。我试着为你的折叠代码,以便更好地理解我的问题。非常感谢