2011-12-21 66 views
0

我想弄清楚JS中的兩個字符之間匹配的正則表達式,但可以像兩個不同的變體,所以它需要知道這一點。我需要逗號和(或逗號和字母后面跟一個句之間匹配(「T」)在JavaScript中做正則表達式來匹配兩個字符

這裏的數據我:

Doe, John (SUP) 
Doe, John T. (SUP) 
Doe, John Smith (SUP) 
Doe, John Smith T. (SUP) 
Doe, John-Smith (SUP) 
Doe, John-Smith T. (SUP) 

我需要匹配剛剛從名字。這所以會是這樣:

John 
John 
John Smith 
John Smith 
John-Smith 
John-Smith 

下面的代碼我到目前爲止:

var nameLinkAdd = nameLink.match(/\,(.*?)\(/g); 

任何建議謝謝!

+0

你可以先分開它們每行 – Ibu 2011-12-21 00:23:05

+0

順便說一句,它只會每次只有一行。我只是給了所有不同的可能性(至少我認爲所有的可能性)。但是,這將只是一個名稱,將被替換。 – zen 2011-12-21 02:25:20

回答

0

這將工作,如果你不一定有(SUP)之後。也就是說,它會在

Doe, John 
Doe, John-Smith 

nameLink.match(/\, *([A-Za-z]+(?:[- ]+[A-Za-z]+\b(?!\.))*)/)' 

工作(?!.)確保你沒有捕獲任何後跟一個peroid .

如果你想避免lookarounds(可能是一個速度問題,雖然如此短的字符串,我不這麼認爲),嘗試:

nameLink.match(/\, *([A-Z][a-z]+(?:[- ]+[A-Z][a-z]+)*)/)' 

然而,這假定所有的名字有一個以上的信,並從一個大寫開始,後面跟着小寫(這似乎是合理的,是否有任何內部大寫字母或名稱只包含一個字母的名稱?)

+0

我認爲這是安全的假設。我不認爲有一個字母的名字或任何奇怪的東西。用你的正則表達式,它也會選擇這個逗號和空格。像「約翰」。這不是爲了你嗎? – zen 2011-12-21 02:16:46

+0

它*匹配逗號,但名稱本身在組1中(第一組捕獲括號)。 – 2011-12-21 02:20:38

0

我喜歡用http://regexpal.com/來計算正則表達式。

+0

我使用http://gskinner.com/RegExr/這是一個非常可靠的工具,但是正則表達式,尤其是更復雜的正則表達式,只是讓我的思緒在各處爭論不休,最終我只是碰到一個凹凸,無法繼續。 – zen 2011-12-21 02:18:16

0

嘗試:

nameLink.match(/^(\w+(?:\s*\w+)*)\s+(?:\w\.)?\()/); 

你想將在組1

normal* (special normal*)*又是什麼;)

  • 正常= \w
  • 特殊= \s*
+0

這仍然捕獲上面的'T'。 – 2011-12-21 00:25:07

+0

斑點。修復... – fge 2011-12-21 00:28:53