Я могу видеть круг в firefox, делая 2 вещи:
1) Переименование файла из html в xhtml
2) Сменить скрипт на
<script type="text/javascript">
$(document).ready(function(){
var obj = document.createElementNS("http://www.w3.org/2000/svg", "circle");
obj.setAttributeNS(null, "cx", 100);
obj.setAttributeNS(null, "cy", 50);
obj.setAttributeNS(null, "r", 40);
obj.setAttributeNS(null, "stroke", "black");
obj.setAttributeNS(null, "stroke-width", 2);
obj.setAttributeNS(null, "fill", "red");
$("svg")[0].appendChild(obj);
});
</script>
Это работает с вашими тесткейсами:
static String splitCamelCase(String s) {
return s.replaceAll(
String.format("%s|%s|%s",
"(?<=[A-Z])(?=[A-Z][a-z])",
"(?<=[^A-Z])(?=[A-Z])",
"(?<=[A-Za-z])(?=[^A-Za-z])"
),
" "
);
}
Вот тестовый харнесс:
String[] tests = {
"lowercase", // [lowercase]
"Class", // [Class]
"MyClass", // [My Class]
"HTML", // [HTML]
"PDFLoader", // [PDF Loader]
"AString", // [A String]
"SimpleXMLParser", // [Simple XML Parser]
"GL11Version", // [GL 11 Version]
"99Bottles", // [99 Bottles]
"May5", // [May 5]
"BFG9000", // [BFG 9000]
};
for (String test : tests) {
System.out.println("[" + splitCamelCase(test) + "]");
}
Он использует регекс с нулевой длиной и lookbehind и lookforward для поиска места вставки пробелов. В основном есть 3 шаблона, и я использую String.format
, чтобы собрать их вместе, чтобы сделать их более читабельными.
Три паттерна:
XMLParser AString PDFLoader
/\ /\ /\
MyClass 99Bottles
/\ /\
GL11 May5 BFG9000
/\ /\ /\
Использование обходных путей с нулевой длиной для разбиения:
Следующее регулярное выражение может использоваться для определения заглавных букв внутри слов:
"((?<=[a-z0-9])[A-Z]|(?<=[a-zA-Z])[0-9]]|(?<=[A-Z])[A-Z](?=[a-z]))"
Соответствует каждой заглавной букве, то есть эфиру после не заглавной буквы или цифры или за которым следует строчная буква и каждая цифра после буквы.
Как вставить пробел перед ними, я не знаю Java =)
Отредактировано, чтобы включить регистр цифр и регистр PDF Loader.
Я думаю, вам придется перебирать строку и обнаруживать изменения от нижнего регистра к верхнему, верхнего регистра к нижнему, буквенного к числовому, цифрового к буквенному. При каждом изменении вы обнаруживаете вставку пробела с одним исключением: при переходе с верхнего на нижний регистр вы вставляете пробел на один символ раньше.
http://code.google.com/p/inflection-js/
Вы можете связать String.underscore (). humanize () , чтобы взять строку CamelCase и преобразовать ее в удобочитаемую строку.
Я не ниндзя в области regex, поэтому я бы перебирал строку, сохраняя индексы текущей проверяемой позиции и предыдущей позиции. Если текущая позиция - заглавная буква, я бы вставил пробел после предыдущей позиции и увеличил каждый индекс.