javascript - 在两个单词之间应用正则表达式

标签 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 不存在,正则表达式会 try catch 文本的其他部分,如您在此处看到的:http://regexr.com/3d03m

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

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

最佳答案

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

如果您有 1 个字符分隔符,例如 [],您将使用否定字符类 [^\]\[]* 而不是 .*?。在这里,您可以使用经过调和的贪婪 token :

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

请参阅regex demo

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

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

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

参见another regex demo

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

关于javascript - 在两个单词之间应用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942316/

相关文章:

regex - 用于自定义解析的正则表达式

javascript - 原型(prototype)和类/构造函数/对象成员

javascript - 如何改变div的滚动速度

regex - AngularJS忽略字符串中的空格

python - { } 量词如何工作?

c# - 使用释放字符和分隔符使用正则表达式拆分字符串

javascript - 使用 for 循环在一个字符串中插入多个字符串

javascript - 将输入字段中输入的空格实时更改为下划线

javascript - 为什么 req.cookies 未定义?

regex - 使用Stringr从R中的序列中提取最后4位数字