Javascript 匹配x,但不匹配y anwywhere(不在匹配图案之前、之间或之后)

Javascript 匹配x,但不匹配y anwywhere(不在匹配图案之前、之间或之后),javascript,regex,Javascript,Regex,我想匹配几种书写姓氏的方式,但这与姓氏不匹配。如何做到这一点? 我已经有了下面的正则表达式,但是我找不到“AND NOT match'first'anywhere”(因此逻辑AND和逻辑NOT都不匹配) (?:(?:(?:last)*.*name);(?:name.*last);(?:(:achter)*.*naam);(?:familie.*naam) 但由于有时“name”也意味着lastname,所以它与firstname匹配,这是我不想要的。 我尝试添加以下表达式,但失败:[^(?:fi

我想匹配几种书写姓氏的方式,但这与姓氏不匹配。如何做到这一点? 我已经有了下面的正则表达式,但是我找不到“AND NOT match'first'anywhere”(因此逻辑AND和逻辑NOT都不匹配)

(?:(?:(?:last)*.*name);(?:name.*last);(?:(:achter)*.*naam);(?:familie.*naam)

但由于有时“name”也意味着lastname,所以它与firstname匹配,这是我不想要的。 我尝试添加以下表达式,但失败:
[^(?:first)]+
(?!(?:first))
,等等

附言。
我没有使用javascript函数或任何东西的能力。我必须将这个正则表达式放入firefox autofill插件形式的字段中。因此,我需要在正则表达式本身中解决这个问题。

我认为纯正则表达式不可能做到这一点,因为正则表达式正是有限状态机可以识别的表达式。

匹配不包含第一个且不为空的任何内容:

^(?:(?!first).)+$
如果必须包含名称:

^(?:(?!first).)*name(?:(?!first).)*$
您还可以使用两种检查:

(str.search(/name/i) >=0 && str.search(/first/i) == -1)

大多数现代正则表达式实现都能够识别非正则语言。例如,正则表达式
^([a-z]+)\s+(?!\1$)([a-z]+)$
匹配字符串,如
“foo bar”
“foo foo”
,但不匹配
“foo foo”
(两个词相同)。不知道为什么我的愿望不代表有限的可能性(正如我所怀疑的“有限统计机器”所暗示的)我的意思是“first”只会在输入中出现一次。我们唯一不知道的是,在哪里(之前、之后、在其余(单独的)单词之间)。morja,当我测试你的正则表达式时,它仍然与“firstname”中的“irstname”匹配。为了更好地解释:som示例:应该匹配:lastname,lastname,name last,achternaam。完全不应该匹配:firstname,first name,first last name,firstnamelast,…换句话说,从“first”开始在那里的某个地方,我想要一个完全不匹配的。是的,它将匹配irstname,但您无法排除first的所有可能拼写错误。regex^(?:(?!first)。+$但是,按照您的要求,它与包含first的任何内容都不匹配。此处测试:如果您希望它与irstname不匹配,则必须将其更改为^(?:(?!irst))+“此姓氏不好”。匹配(^(?:(!first)。+$)返回null;“此姓氏好”。匹配(^(?:(!first)。+$)返回“此姓氏好”;您是如何测试正则表达式的?不允许是什么意思?您使用的是javascript,对吗?您将需要^和$作为否定条件。但是检查我更新的答案,我添加了另一种可能性。这对您更合适吗?