2015-11-02 20 views
0

我做了我的公司,我跟蹤應用真的需要你的幫助1串是2個字的無空白

我有一些字符串顯示錯

我去拿郵政編碼/郵政編碼和城市的名稱和「功能」(例如distrubition基礎) 我得到的字符串是類似的東西(這是瑞士和格式郵編城市名功能)

place = "5506 MägenwilDistributionsbasis"; 

現在的郵政區號爲「 5506「
城市名是「梅根維爾」
功能是「Distributionsbasis」

我的問題是我怎麼能(現在這個例子)拆分城市名和功能?
是否可以用正則表達式或if語句來做到這一點?

+1

那麼你知道在分割字符串之前函數名將會是什麼? –

+0

你將不得不定義一些關於你如何知道什麼是城市和什麼是功能的規則......否則你運氣不好 –

+0

你必須具備精確的城市名稱或功能以便能夠拆分字符串 – QuakeCore

回答

2

您可以使用下面的正則表達式分割字符串:

var myString = "5506 MägenwilDistributionsbasis"; 
var units = /(\d+)([A-Z][^A-Z]+)(.+)/g.exec(myString); 

退房陣列units的內容:有你看到units[0]是整個字符串,units[1], units[2], units[3]是你所需要的。

注意根據意見,我必須說,這只是一個可能的解決方案的草案,讓你瞭解如何開始在JS中的問題的工作。因此,當您在「魔術字符串」中使用更復雜的城市名稱和函數名稱測試您的應用程序時,請嘗試找出完美匹配您的用途的regexp,因爲([A-Z][^A-Z]+) definitly不會匹配所有已知的城市名稱。

+0

這也只適用於因爲在字符類[[AZ]]中方便地使用變音符號「ä」。但是對於許多其他字母也是如此,例如'Ä'... – Joey

+0

不幸的是,在Switserland有很多城市有多個大寫字母和破折號,所以它不起作用。看到我的答案稍作修改。 –

+0

omg這個作品完美! 非常感謝你! – KingOfDarkness

1

你可以用最原始的方式實現它。事情是這樣的:

place = "5506 MägenwilDistributionsbasis"; 
var codeAndNameAndFunction = place.split(" "); 
var code = codeAndNameAndFunction[0]; 
var nameAndFunction = codeAndNameAndFunction[1]; 
var startOfTheFunction; 

for (var i = 1, len = nameAndFunction.length; i < len; i++) { 
    myCharacter = nameAndFunction.charCodeAt(i); 
    if (myCharacter >= 65 && myCharacter <= 90) { 
     startOfTheFunction = i; 
     break; 
    } 
} 

var name = nameAndFunction.slice(0, startOfTheFunction); 
var functionName = nameAndFunction.slice(startOfTheFunction,nameAndFunction.length); 
1

這是弗洛裏安Peschka的回答稍微修改:

您可以使用下面的正則表達式分割字符串:

var myString = "5506 Yverdon-les-BainsDistributionsbasis"; 
var units = /(\d+)(.+)([A-Z][^A-Z]+)/g.exec(myString); 

退房的陣列單元的內容:有你看到單位[0]是整個字符串,單位[1],單位[2],單位[3]是你所需要的。

注意只有當「函數」名稱始終採用大寫字母后跟非大寫字母的形式時,纔會起作用。

相關問題