2015-11-02 2 views
0

Я делаю приложение отслеживания для моей компании, и я действительно нужна ваша помощь1 строка, 2 слова, не имеющие пробельных

У меня есть несколько строк, которые отображаются неправильно

я получу почтовый индекс/почтовый индекс и название города и «функция» (например, distrubition основе) строка я получаю что-то вроде этого (это швейцарец и формат почтового индекса функция CITYNAME)

place = "5506 MägenwilDistributionsbasis"; 

Теперь почтовый индекс является " 5506 "
CITYNAME является «Мегенвиль»
функция «Distributionsbasis»

мой вопрос, как я могу разделить CITYNAME и функции (для этого примера, сейчас)?
Можно ли это делать с помощью регулярного выражения или оператора 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. Поэтому, когда вы проверите свое приложение с более сложными названиями городов и именами функций в «волшебной строке», попробуйте выяснить, какое регулярное выражение подходит для ваших целей, потому что ([A-Z][^A-Z]+) определенно не будет соответствовать всем известным названиям городов.

+0

Это также работает только потому, что umlaut 'ä' удобно в классе символов' [^ 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] - это то, что вам нужно.

Примечание что это будет работать только в том случае, если имя «функция» всегда находится в форме «Столичного письма», за которым следуют неширокие буквы.

Смежные вопросы