想象一下,搜索包含1000个A,B,C,D,E序列的非常大的文件的情况。请注意AE是按顺序排列的,并且从不会发生E在A之前。我可以使用四个基本的RegExp语句每个A,每个B,每个C,每个D或E匹配1000次,最后从头到尾读取整个文件5次。但是,这会造成很多开销,应该是低效的。我需要能够只读取整个文件一次。对于1000套A,B,C,D,EI中的每一套,首先要找到A,然后继续读取文件以再次匹配B,C,D和E A,B,C,D,E仅在1次结束所有搜索。如何在Javascript/jQuery中通过RegExp按顺序搜索多个模式?
请注意,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和Es?
更新: 以下是摘录我的代码匹配:
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);
当我运行上面的代码,它只是找到所有作为。当我改组他们的订单并使用
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工作正常,这意味着它们没有错误。
显而易见的问题是...你试过了吗? – charlietfl 2014-10-19 17:47:19
是的,但它不起作用。尽管我仍在努力。 – Espanta 2014-10-19 18:00:15
您的文件是否被分隔成可以逐一搜索每一行的行?还是仅仅是一个没有分隔符的文本流?我问,因为如果您在阅读时可以将输入分解为某种可搜索的单元,那么您可以搜索每个可搜索单元上的多个模式中的每一个,从而避免多次读取文件。 – jfriend00 2014-10-19 18:05:38