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,不是在全文中。我现在很忙,但如果有什么不清楚的地方,请发表评论,我会在半小时内回答。谢谢,那太好了!什么是贪心的代币这是对这个问题的一些解释。它是基于一个点匹配和一个负的前瞻性,防止溢出的分隔符。