2014-10-04 3 views
3

Я пытался получить команду JavaScript регулярные выражения, чтобы включить что-то вроде EYDLessThan5Days в EYD менее чем за 5 дней. Есть идеи?Split Pascal Дело в Javascript (Некоторые Case)

Код я использовал:

"EYDLessThan5Days" 
    .replace(/([A-Z])/g, ' $1') 
    .replace(/^./, function(str){ return str.toUpperCase(); }); 

Out: E Y D Меньше Than5 Days
Но все-таки дать мне неправильный результат.

Пожалуйста, помогите мне. Благодарю.

ответ

5

Попробуйте выполнить следующую функцию, она предназначена для работы со всеми типами струн, которые вы можете наложить на нее. Если вы обнаружите какие-либо недостатки, укажите в комментариях.

function camelPad(str){ return str 
 
    // Look for long acronyms and filter out the last letter 
 
    .replace(/([A-Z]+)([A-Z][a-z])/g, ' $1 $2') 
 
    // Look for lower-case letters followed by upper-case letters 
 
    .replace(/([a-z\d])([A-Z])/g, '$1 $2') 
 
    // Look for lower-case letters followed by numbers 
 
    .replace(/([a-zA-Z])(\d)/g, '$1 $2') 
 
    .replace(/^./, function(str){ return str.toUpperCase(); }) 
 
    // Remove any white space left around the word 
 
    .trim(); 
 
} 
 

 
// Test cases 
 
document.body.appendChild(document.createTextNode(camelPad("EYDLessThan5Days"))); 
 
document.body.appendChild(document.createElement('br')); 
 
document.body.appendChild(document.createTextNode(camelPad("LOLAllDayFrom10To9"))); 
 
document.body.appendChild(document.createElement('br')); 
 
document.body.appendChild(document.createTextNode(camelPad("ILikeToStayUpTil9O'clock"))); 
 
document.body.appendChild(document.createElement('br')); 
 
document.body.appendChild(document.createTextNode(camelPad("WhatRYouDoing?"))); 
 
document.body.appendChild(document.createElement('br')); 
 
document.body.appendChild(document.createTextNode(camelPad("ABC"))); 
 
document.body.appendChild(document.createElement('br')); 
 
document.body.appendChild(document.createTextNode(camelPad("ABCDEF")));

+0

Благодаря @ djdavid98 все мои тестовые примеры могут быть решены вашим решением. –

+0

Это не работает с аббревиатурами из 3 букв, такими как «ABC», он преобразует его в «AB C» – Superdumbell

+1

@Superdumbell. Проверьте мое редактирование, я считаю, что он делает то, что вам нужно. – SeinopSys

3

Это будет работать для вас

"EYDLessThan5Days".replace(/([A-Z][a-z])/g,' $1').replace(/(\d)/g,' $1'); 

даст вам "EYD Менее чем за 5 дней"

Что я делаю здесь

replace(/([A-Z][a-z])/g,' $1') 

Если Заглавные буквы следуют строчными буквами, добавить пространство до этого

replace(/(\d)/g,' $1') 

Если есть несколько увеличить пространство до этого.

+1

Единственная проблема, которую я вижу с вашим ответом, состоит в том, что оператор op предоставил только строку в качестве примера, и, хотя ваш код действительно работает для этого конкретного примера, он потерпит неудачу, если строка будет '' It'sOver9000And1'', превратив ее в '' It's Over 9000 And1 "' из-за отсутствующего флага 'g', но если вы его добавили, тогда он станет' 'It's Over 9 0 0 0 И 1" '. Он работает до тех пор, пока в строке присутствует только 1 номер, но другой случай, когда он завершится с ошибкой, будет '' IAmAGuy'', оставив «I» и «A» в одиночку, потому что за ним не следует более низкий уровень, буква. – SeinopSys

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