Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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,我需要确认文本的一部分之间是否存在一个\s01\s,所以我需要一个分隔符 我有一个巨大的文本: ... RESUMO DO FECHAMENTO - EMPRESA MODALIDADE : "BRANCO"-RECOLHIMENTO AO FGTS E DECLARAÇÃO À PREVIDÊNCIA 858600000039 672701801102 107527053051 769205500015 Nº ARQUIVO: NmDA0FH71Ig0000-3 Nº DE CONTROLE

我需要确认文本的一部分之间是否存在一个
\s01\s
,所以我需要一个分隔符

我有一个巨大的文本:

...

RESUMO DO FECHAMENTO - EMPRESA MODALIDADE : "BRANCO"-RECOLHIMENTO AO FGTS E DECLARAÇÃO À PREVIDÊNCIA 858600000039 672701801102 107527053051 769205500015 Nº ARQUIVO: NmDA0FH71Ig0000-3 Nº DE CONTROLE: BdmBPppCuyu0000-1 INSCRIÇÃO: 57.692.055/0001-27 COMP: 11/2010 COD REC:115 COD GPS: 2100 FPAS: 612 OUTRAS ENT: 3139 SIMPLES: 1 RAT: 3.0 FAP: 1.57 RAT AJUSTADO: 4.71 TOMADOR/OBRA: INSCRIÇÃO: LOGRADOURO: AVENIDA ALEXANDRE COLARES 500 3 ANDAR BAIRRO: VILA JAGUARA CNAE PREPONDERANTE: 4930202 CIDADE: SAO PAULO UF: SP CEP: 05106-000 CNAE: 4930202 CAT QUANT REMUNERAÇÃO SEM 13º REMUNERAÇÃO 13º BASE CÁL PREV SOC BASE CÁL 13º PREV SOC 07 2 1.100,35 429,09 1.100,35 0,00

...
在这篇文章中,我需要确认01和07是否存在,但如果01不存在,正则表达式试图捕捉文本的其他部分,如您在这里所见:

我怎样才能使正则表达式仅在这两个词之间工作?可能吗


正则表达式:
(?:RESUMO DO FECHAMENTO-EMPRESA MODALIDADE:“BRANCO”)(*01)(?:*(?=TOTAIS:)

我不明白你想做什么。。很抱歉 但是根据你的标题“在两个词之间应用正则表达式” 我假设,如果“01”和“07”出现,你想在两者之间加逗号。 如果是这样,那么它将是:(Perl)


s/(01)\s+(07)/\1,2\3/g

您遇到的问题是,
*?
——尽管被称为“懒惰”或“不情愿”——仍然尝试匹配尽可能多的字符以返回有效匹配。由于
匹配除换行符以外的任何字符,因此它与前导多字符分隔符(以及尾随符)匹配

如果您有1个字符分隔符,比如
[
]
,那么您将使用一个否定字符类
[^\]\[]*
,而不是
*?
。在这里,您可以使用以下令牌:

(?:(?!TOTAIS:).)*

要支持多行文本,
必须替换为
[\s\s]

然而,这个解决方案相当耗费资源,因为我们基本上检查每个位置,如果它启动了
TOTAIS:
序列,我们将停止匹配。更有效的方法是展开此令牌,例如:

[^T]*(?:T(?!OTAIS:)[^T]*)*


这个版本也可以跨换行符匹配。它匹配除
T
以外的0*个字符,然后匹配未跟在
OTAIS:
后面的
T
以外的0*个字符序列。但是,它无法检查
TOTAIS
是否是一个完整的单词。

我不清楚,您想捕获什么文本?你想要的输出是什么?你能举一个小样本的例子吗?我不太明白你想要什么。在我的文本中,我试图确认RESUMO DO FECHAMENTO-EMPRESA MODALIDADE:“BRANCO”和第一个总数之间是否存在01和07,问题是,文本中有其他总数,因此如果这两个词之间不存在01,正则表达式将尝试与下一个总数匹配。因此,演示中的文本根本不应该匹配?尝试将所有
*?
替换为
(?:(?!TOTAIS:))*
。但这不是最好的解决方案,最好是展开版本(
*?
-->
[^T]*(?:T(?!OTAIS:)[^T]*)*
)。是的!现在正在工作,你能给我解释一下吗?和。。这是一个展开的版本??我想确认RESUMO DO FECHAMENTO-EMPRESA MODALIDADE:“BRANCO”和TOTAL之间是否存在,就像我说的@Gon,不是在全文中。我现在很忙,但如果有什么不清楚的地方,请发表评论,我会在半小时内回答。谢谢,那太好了!什么是贪心的代币这是对这个问题的一些解释。它是基于一个点匹配和一个负的前瞻性,防止溢出的分隔符。