2012-09-17 12 views
1

我已經從YouTube視頻中抓取了標題。我已經降低到類似於這些字符串:正則表達式拆分'VS Teamnames'字符串

string1 = "Red~VS~Blue"; 
string2 = "oRange v wHite"; 
string3 = "black knights verses purple people"; 

team0 = string.split(regexp)[0]; 
team1 = string.split(regexp)[1]; 

我試圖使用JavaScript的string.split方法,每個字符串分解成兩個teamnames的數組。空間或分隔符能否通過並不重要,因爲它們可以在以後輕鬆清理。我也希望正則表達式具有一些基本的錯字捕捉功能。

正則表達式:

regexp = /\Wv(s|\W)/i; \\Should match " v " or " vs", gives 3 results instead of 2 
regexp = /\Wv[s\W]/i; \\Works as I thought the above should 
regexp = /\W(vs|v\W|vers[eu]s)/i \\attempt at dealing with typos, doesn't work 

當我添加的,而不是包裹什麼我已經寫了更多的括號(),也容易增加額外的結果拆分。我已閱讀了關於正則表達式herehere的這些教程以及stackoverflow的一些答案,但我找不到任何與幫助相關的內容。我該如何解決這個問題?

回答

3
result = subject.split(/\W+v(?:ers[ue])?s?\W+/i); 

正確拆分所有示例字符串。

說明:

\W+  # Match one or more non-word characters 
v   # Match v 
(?:  # followed by 
ers[ue] # ersu or erse 
)?   # (optionally) 
s?   # followed by s (optionally) 
\W+  # Match one or more non-word characters 

這也符合versuverse,雖然。

+0

謝謝!匹配的詩將是一個積極的,並且versu不太可能被輸入,是?:相當於?=和)?相當於 )* ? – Crazometer

+0

@Crazometer:'(?:...)'是一個非捕獲組,因此它就像普通的'(...)'一樣工作,但不存儲匹配的內容以備後用(「反向引用」)因此速度更快。我只是注意到,外部對是多餘的,但;我現在要清理它。 –