2016-09-23 1 views
0
end_address = 'joe place, 555 test street, sacramento, ca, usa 95814'; 

end_address = end_address.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 

Конечный результат этого:RegEx шаблон всегда прописные "CA" и "USA" в адресной строке

Джо Place, 555 Test Street, Сакраменто, Калифорния, США 95814

но мой желаемый результат:

Джо Place, 555 Street Test, Сакраменто, Калифорния, США 95814

Как я могу сопоставить строку так, чтобы «CA» и «USA» всегда были прописными буквами, как желаемый результат?

+1

Если у вас нет поля специально для штата и страны, вам будет трудно с этим справиться. Что, если я - японский магазин кроликов, и я хочу, чтобы мой адрес был «Usa Farm, 555 test street, sacramento, ca, usa 95814»? Какую «usa» вы используете? – Welbog

+0

Является ли адрес всегда «государством, страной, почтой»? – epascarello

+0

@epascarello yes – alwayslearning

ответ

0

Это будет работать:

end_address = 'jOe place, 555 test street, sacramento, ca, usa 95814'.toLowerCase(); 
 

 
end_address = end_address.replace(/\b(usa\b|ca\b|\w)/g, function(txt) { return txt.toUpperCase(); }); 
 

 
alert(end_address);

Во-первых, я в нижнем регистре все это, а затем применить регулярное выражение капитализации, /\b(usa\b|ca\b|\w)/g, которая выглядит для начала слова. Он будет соответствовать, затем заглавные буквы «usa», «ca» или первый символ слова.

+0

Почему вы все это делаете? Это кажется неэлегантным, а не в соответствии с целью OP. –

+0

@SebastianLenartowicz Он не был явно указан как требование, но код указывает, что это так. Если вы посмотрите, функция перехватывает первую букву и уменьшает остальную часть строки. – Laurel

0

То, что я хотел бы сделать что-то вроде этого:

address = address.replace(
    /([a-z]{2}),\s*([a-z]{3})\s*(\d{5})$/i, 
    function(match, state, country, zip) { 
     return state.toUpperCase() + ", " + country.toUpperCase() + " " + zip; 
    }) 

Это сделает замену за один проход, и будет касаться только государства/страны (предполагается, что те находятся в конце строки) ,

See the regex work on Regex101

0

Предполагая, что шаблон всегда будет то же самое, что вам нужно сделать второй проход на шнуре.

var result = end_address 
    .replace(/\w\S*/g, function(txt){ 
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
    }).replace(/(\w{2}), (\w+) (\d{5}(-\d{4})?)$/, function(match, state, country, zip) { 
    return state.toUpperCase() + ", " + country.toUpperCase() + ", " + zip; 
    }); 
Смежные вопросы