如果正确的那个组不存在,正则表达式匹配其他组

时间:2016-03-11 12:33:54

标签: javascript regex

我需要创建3个正则表达式:

第一个在07之后,在BASE CAL 13 PREV SOC之后和FECHAMENTO - MODALIDADE:“BRANCO”之后取第四个值。

第二个在07之后,在BASE CAL 13 PREV SOC之后和FECHAMENTO-MODALIDADE之后获得第四个值。

第三个在07之后,在BASE CAL 13 PREV SOC之后和FECHAMENTO-MODALIDADE之后获得第四个值。

这是我创建的正则表达式,但它们错了:

1. /\sFECHAMENTO - EMPRESA MODALIDADE :\s"BRANCO".*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s01(\s[\d,.]+){4}\s*?/

2. /\sFECHAMENTO - EMPRESA MODALIDADE :\s1.*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s07(\s[\d,.]+){4}\s*?/

3. /\sFECHAMENTO - EMPRESA MODALIDADE :\s9.*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s07(\s[\d,.]+){4}\s*?/

演示:

  1. Regex MODALIDADE:“BRANCO”:http://regexr.com/3d02f工作正常,但是因为07存在,如果07不存在并且它存在于MODALIDADE:1中,则会得到错误的值。< / p>

  2. Regex MODALIDADE:1:http://regexr.com/3d02i获得MODALIDADE 9的值。

  3. 正则表达式MODALIDADE 9:http://regexr.com/3d02l获得了正确的值,但它可能会得到错误的值,因为其他值也是如此。

  4. 问题是*?就在BASE CAL PREV 13之后,正在接受一切以找到匹配。我怎么能解决这个问题?

    感谢。!!

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你可以:

  1. 在每个正则表达式中将.*?更改为((?!FECHAMENTO).)*?,这会阻止.*? 从重叠到另一个FECHAMENTO(...)段;喜欢在:

    \sFECHAMENTO - EMPRESA MODALIDADE :\s"BRANCO"((?!FECHAMENTO).)*?(BASE CÁL) 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s(07)(\s[\d,.]+){4}\s*?
    

    DEMO

    ...或

  2. 因为你的所有正则表达式非常相似,并且只有一个值不同 (1,9,“BRANCO”),你可以使用一个正则表达式和distingiush案例 一个值:

    \sFECHAMENTO - EMPRESA MODALIDADE :\s("BRANCO"|9|1)(?:(?!FECHAMENTO).)*?BASE CÁL 13º PREV SOC\s*?(?:(?:01|02|03|04|05|06)(?:\s[\d,.]+)+)?\s07(?:\s([\d,.]+)){4}\s*?
    

    DEMO

    只需检查组$1捕获的值,您就会得到 相应的价值。

  3. 我认为第二种选择更好,但这取决于你。