匹配x,但不是y anwywhere(不在匹配模式之前,之间或之后)

时间:2010-12-03 12:06:49

标签: javascript regex

我想匹配几种编写姓氏的方法,但这与firstname不匹配。如何才能做到这一点? 我已经在下面的正则表达式,但我找不到“并且首先'不匹配''任何地方”(所以既不逻辑AND也不逻辑NOT)。

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

但是因为有时“name”也意味着姓氏,所以它是我不想要的名字匹配。 我尝试添加,但失败了,这样的表达式:[^(?:first)]+(?!(?:first))等。

P.S。 我没有使用javascript函数或任何东西的libarty。我必须把这个正则表达式放在我的firefox autofill-addon形式的字段中。所以,我需要在正则表达式中解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

^(?:(?!first).)+$

如果必须包含名称:

^(?:(?!first).)*name(?:(?!first).)*$

你也可以使用两张支票:

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

答案 1 :(得分:0)

我不认为纯正的regexp是可能的,因为正则表达式正是有限状态机可识别的那些。