Регулярное выражение, строка разделения прописной буквой, но игнорируют TLA

<span id="text">Text</span>

<script>
var textWidth = document.getElementById("text").offsetWidth;
</script>

Это должно работать пока < span> тег не имеет никаких других стилей, относился к нему. offsetWidth будет включать ширину любых границ, горизонтального дополнения, вертикальной ширины полосы прокрутки, и т.д.

29
задан Simon 8 July 2009 в 13:23
поделиться

4 ответа

((?<=[a-z])[A-Z]|[A-Z](?=[a-z]))

или его Unicode -aware двоюродный брат

((?<=\p{Ll})\p{Lu}|\p{Lu}(?=\p{Ll}))

при замене глобально на

" $1"

дескрипторы

TodayILiveInTheUSAWithSimon
USAToday
IAmSOOOBored

уступающие

 Today I Live In The USA With Simon
USA Today
I Am SOOO Bored

На втором этапе вам нужно будет обрезать строку.

43
ответ дан 28 November 2019 в 01:24
поделиться

любой символ верхнего регистра, за которым не следует символ верхнего регистра:

Replace(string, "([A-Z])(?![A-Z])", " $1")

Изменить:

Я только что заметил, что вы используете это для перечислений. Я действительно не поощряю использование строковых представлений перечислений, подобных этому, и существующие проблемы - хорошая причина для этого. Взгляните на это вместо этого: http://www.refactoring.com/catalog/replaceTypeCodeWithClass.html

12
ответ дан 28 November 2019 в 01:24
поделиться

Вы можете подумать об изменении перечислений; Руководства по кодированию MS предлагают использовать аббревиатуры Паскаля в регистре, как если бы они были словами; XmlDocument , HtmlWriter и т.д. Однако двухбуквенные акрионимы не подчиняются этому правилу; System.IO .

Итак, вы должны использовать UsaToday , и ваша проблема исчезнет.

1
ответ дан 28 November 2019 в 01:24
поделиться

У меня сработало выражение Томалака, но не встроенная функция Replace . Regex.Replace () , однако, сработало.

For i As Integer = 0 To names.Length - 1
  'Worked
  names(i) = Regex.Replace(names(i), "((?<=[a-z])[A-Z]|[A-Z](?=[a-z]))", " $1").TrimStart()

  ' Didn't work
  'names(i) = Replace(names(i), "([A-Z])(?=[a-z])|(?<=[a-z])([A-Z])", " $1").TrimStart()
Next

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

0
ответ дан 28 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: