2010-12-03 43 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) 
相關問題