我有以下RegExp:(?<= )L.*(?!MH$)
这个想法是:

  • (?<= ) 4个空格必须位于比赛之前,但不包括在比赛中。
  • L.*匹配项必须以L开头,并包括字符串的其余部分...
  • (?!MH$) 除非 MH在字符串的末尾。

  • 最后一个条件被忽略。以MH结尾的字符串仍然匹配。为什么?

    const regExpStr = String.raw`(?<=    )L.*(?!MH$)`;
    const regExp = new RegExp(regExpStr);
    const str = '2.    L2 B4 RHODA 1 ADDN,SOMECITY,OK,74999 - 81 HILLCREST MH';
    const match = str.match(regExp)?.[0];
    
    console.log(match);

    最佳答案

    最后,您可以在正则表达式后面加上一个额外的负数:

    (?<= {4})L.*$(?<!MH)
    
    RegEx Demo
    RegEx详细信息:
  • (?<= {4}):当我们在当前位置
  • 之前有4个空格时,允许此匹配
  • L.*$:匹配以L开头的字符串,直到
  • 结束
  • (?<!MH):当我们在当前位置(结束)
  • 之前有MH时,匹配失败

    09-26 06:20