在两个单词

时间:2016-03-11 14:07:34

标签: 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: 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不存在,正则表达式试图捕捉文本的其他部分,正如您在此处所见:http://regexr.com/3d03m

我怎样才能使正则表达式只在这两个单词之间起作用?有可能吗?

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

2 个答案:

答案 0 :(得分:1)

你遇到的问题是.*? - 虽然叫做“#34;懒惰"或者"不情愿的" - 仍然尝试匹配尽可能多的字符以返回有效匹配。由于.匹配除换行符之外的任何字符,因此它与您的前导多字符分隔符(以及尾随符号)匹配。

如果您有1个字符分隔符,例如[],则可以使用否定字符类 [^\]\[]*而不是.*?。在这里,你可以使用一个驯化的贪婪令牌:

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

请参阅regex demo

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

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

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

请参阅another regex demo

此版本也适用于新行。它匹配除T以外的0 *字符,然后是T的0 *序列,其后面没有OTAIS:,后跟0 T以外的字符。但是,它无法检查TOTAIS是否完整。

答案 1 :(得分:0)

我不明白你要做什么..对不起.. 但根据你的标题“在两个单词之间应用正则表达式”, 我假设,如果“01”和“07”到来,你想在它之间加上逗号。 如果是这种情况,那么它将是:(Perl)

S /(01)\ S +(07)/ \ 1,\ 2 \ 3 /克;