2010-12-03 42 views
0

我想匹配几种写姓的方法,但不匹配firstname。如何才能做到这一点? 我已经在下面的正则表达式,但我无法找到一个“AND不匹配”第一'任何地方“(所以既不是逻辑AND或逻辑NOT)。匹配x,但不是y anwywhere

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

但因为有时“名”也意味着姓氏,它是姓,我不想比赛。 我试过添加,但失败的表达式如下:[^(?:first)]+(?!(?:first))

P.S. 我没有libarty使用JavaScript函数或任何东西。我必须把这个正则表达式放到我的firefox自动填充插件的一个表单域中。所以,我需要在正则表达式中解决这个问题。

回答

0

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

+0

大多数现代正则表达式实现都能够识别非常规语言。例如,正则表达式`^([az] +)\ s +(?!\ 1 $)([az] +)$`匹配类似“foo bar”和“foo fooo”的字符串, “foo foo”(两个相同的词)。 – 2010-12-03 12:51:33

+0

不知道为什么我的愿望不代表有限的可能性(正如我所怀疑的“有限统计机器”暗示的那样) – 2010-12-06 16:25:37

1

要匹配任何不包含第一,不为空:

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

如果它必须包含名称:

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

您还可以使用两次检查:

(str.search(/name/i) >=0 && str.search(/first/i) == -1) 
相关问题