2013-08-22 3 views
21

У меня есть регулярное выражение в JavaScript, чтобы разделить мой случай строку верблюда на прописными буквами, используя следующий код (который я впоследствии получил от here):Regex разделить ГорбатыйРегистр

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

Таким образом, возвращающая :

"My Camel Case String" 

Что хорошего. Однако я хочу сделать это на ступеньку выше. Может ли кто-нибудь помочь мне с регулярным выражением, которое будет разделяться, если и только если первый символ имеет нижний регистр, а последний - верхний регистр.

Таким образом, в приведенном выше примере будет результат я ожидал, но если я делаю:

"ExampleID" 

Тогда я получить вернулся:

"Example ID" 

Вместо

"Example I D" 

С он разбивается на каждый верхний регистр и игнорирует что-либо перед ним.

Надеюсь, что имеет смысл! И спасибо :).

+0

http://www.regular-expressions.info/lookaround.html – Mchl

+7

'(продвинутый) '- сладкий. – devnull

+0

Результат должен быть «My Stel Case String» ... – urzeit

ответ

36

Моя догадка меняет /([A-Z])/ с /([a-z])([A-Z])/ и ' $1' с '$1 $2'

"MyCamelCaseString" 
    .replace(/([a-z])([A-Z])/g, ' $1 $2'); 

/([a-z0-9])([A-Z])/ для чисел подсчета символов в нижнем регистре, как

+0

Фантастический - спасибо! – keldar

+1

@keldar Это не работает для чисел. 'Test1Test2' останется прежним. – Broxzier

+1

@broxzier хорошая точка, добавленный пример для этого. –

28
"MyCamelCaseString".replace(/([a-z](?=[A-Z]))/g, '$1 ') 

выходов:

"My Camel Case String" 
-2

Это RegExp Строка

.replace("/([a-zA-Z][a-z]*)/g",...); 
12

Если вы хотите разделить ГорбатыйРегистр строку, вы можете рассмотреть это:

"myCamelCaseString".split(/(?=[A-Z])/).map(function(s) { 
    return s.toLowerCase(); 
}); 

Вы можете пропустить map часть, но вы в конечном итоге с массивом заглавных букв. Надеюсь, это поможет вам, и извините за мой плохой английский.

Приветствия

+0

Не известно, какие регулярные выражения работают внутри функции split. Я использовал соединение после разрыва в моем случае. Супер простой. – dezinezync

2

Привет я не видел живой demo, благодаря @michiel-dral

var tests =[ "camelCase", 
 
      "simple", 
 
      "number1Case2"] 
 

 
function getCamelCaseArray(camel) { 
 
    var reg = /([a-z0-9])([A-Z])/g; 
 
    return camel.replace(reg, '$1 $2').split(' '); 
 
} 
 

 
function printTest(test) { 
 
document.write('<p>'+test + '=' + getCamelCaseArray(test)+'</p>'); 
 
} 
 

 
tests.forEach(printTest);
<!DOCTYPE html> 
 
<html> 
 

 
    <head> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script src="script.js"></script> 
 
    </head> 
 

 
    <body> 
 
    </body> 
 

 
</html>