如果跟随其组中的内容,为什么负前瞻不会阻止匹配?

Gir*_*rpa 2 javascript regex regex-lookarounds

我有以下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);
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 6

最后,您可以使用此正则表达式进行额外的负面回溯:

(?<= {4})L.*$(?<!MH)
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

正则表达式详情:

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