Sublime Text 3 — фрагмент с верблюжьим регистром — и удаление или преобразование слов специальных символов

Я обновляю некоторые фрагменты Sublime Text, чтобы помочь автоматизировать разработку некоторых страниц, но я сталкиваюсь с небольшим препятствием.

Для этого фрагмента я в настоящее время пытаюсь получить строку показателей (на основе альтернативного текста), чтобы сделать следующее:

<snippet>
    <content><![CDATA[  
    <div class="div-block">
        <!-- Set A -->
        <div class="place_10 start">
            <a href="LinkGoesHere" main_fp_tx="PLACE-_-AH-_-${1:0}_${4:year}_${6/[^a-z0-9]+//ig}">
                <img src="http://images/sv/800/set${2:##}_${3:####}_${4:year}_img${5:#}?\$P_CONTENT\$" alt="${6:ImageAltText}" />
            </a>
        </div>
    </div>]]></content>
    <!-- Optional: Tab trigger to activate the snippet -->
    <tabTrigger>IMGT</tabTrigger>
    <!-- Optional: Scope the tab trigger will be active in -->
</snippet>

Что дает вам это при вводе IMGT и нажатии Tab:

<div class="div-block">
    <!-- Set A -->
    <div class="place_10 start">
        <a href="LinkGoesHere" main_fp_tx="PLACE-_-AH-_-0_year_ImageAltText">
            <img src="http://images/sv/800/set##_####_year_img#?$P_CONTENT$" alt="ImageAltText" />
        </a>
    </div>
</div>

В настоящее время, когда я ввожу This is an example of content. Special character examples: 20% & &amp; &#37; registered trademark &reg; в поле ImageAltText, вот что появляется в строке показателей:

<div class="div-block">
    <!-- Set A -->
    <div class="place_10 start">
        <a href="LinkGoesHere" main_fp_tx="PLACE-_-AH-_-0_year_ThisisanexampleofcontentSpecialcharacterexamples20amp37registeredtrademarkreg">
            <img src="http://images/sv/800/set##_####_year_img#?$P_CONTENT$" alt="This is an example of content.  Special character examples: 20% & &amp; &#37; registered trademark &reg;" />
        </a>
    </div>
</div>

Как видите, прямо сейчас текст метрики переводит текущий пример следующим образом:

"ThisisanexampleofcontentSpecialcharacterexamples20amp37registeredtrademarkreg"

Вот что я пытаюсь сделать:

  • Он должен быть в верблюжьем регистре, то есть каждая буква каждого слова должна быть заглавной.
  • Некоторые символы необходимо перевести в слово. Так, например, «%» должен говорить «Процент», а «&» (амперсанд) должен говорить «И».
  • Имена объектов HTML не должны отображаться. Например, "" просто не должно появляться в метриках. Прямо сейчас он показывает слово "reg". Так что в основном все, что находится между "&" и ";" не должно появляться - а также "&" и ";" части. Есть смысл? Хотя вот здесь становится трудно - & тоже не должно появляться - или, по крайней мере, может сказать "И".

Все, что сказано - вот чего я пытаюсь достичь.

Текущая версия:
ThisisanexampleofcontentSpecialcharacterexamples20amp37registeredtrademarkreg

Что я пытаюсь сделать, чтобы это выглядело:
ThisIsAnExampleOfContentSpecialCharacterExamples20PercentAndRegisteredTrademark

Я пробовал комбинировать функции и немного заработал, но не полностью.

Поэтому я надеялся, что некоторые из вас, хороших разработчиков, могут знать, как это сделать.


person Hinukan    schedule 06.07.2016    source источник


Ответы (1)


Заимствуя от ответа здесь немного:

Следующий фрагмент сделает так, что когда вы вводите This is an example of content. Special character examples: 20% & &amp; &#37; registered trademark &reg; в атрибуте alt img, он будет отображаться в атрибуте a main_fp_tx как: PLACE-_-AH-_-0_year_ThisIsAnExampleOfContentSpecialCharacterExamples20PercentAndRegisteredTrademark:

<snippet>
    <content><![CDATA[  
    <div class="div-block">
        <!-- Set A -->
        <div class="place_10 start">
            <a href="LinkGoesHere" main_fp_tx="PLACE-_-AH-_-${1:0}_${4:year}_${6/(&amp;)|(&[^; ]+;)|(&)|(\b\w)|(%)|(\W)/(?1And:)(?2:)(?3And:)(?4\u\4:)(?5Percent:)(?6:)/g}">
                <img src="http://images/sv/800/set${2:##}_${3:####}_${4:year}_img${5:#}?\$P_CONTENT\$" alt="${6:ImageAltText}" />
            </a>
        </div>
    </div>]]></content>
    <!-- Optional: Tab trigger to activate the snippet -->
    <tabTrigger>IMGT</tabTrigger>
    <!-- Optional: Scope the tab trigger will be active in -->
</snippet>

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

/(&amp;)|(&[^; ]+;)|(&)|(\b\w)|(%)|(\W)/(?1And:)(?2:)(?3And:)(?4\u\4:)(?5Percent:)(?6:)/g
  1. (&amp;) соответствует объекту HTML с амперсандом в группе захвата 1. (?1And:) если группа захвата (1) была сопоставлена, замените ее на And. Если он не совпал, ничего не делайте.
  2. (&[^; ]+;) соответствуют объектам HTML. (?2:) если группа захвата (2) совпала, заменить ее ничем. Если он не совпал, ничего не делайте.
  3. (&) голый амперсанд. (?3And:), если группа захвата (3) совпала, замените ее на And. Если он не совпал, ничего не делайте.
  4. (\b\w) первая буква слова. (?4\u\4:) если группа захвата (4) совпала, замените первую букву ее эквивалентом в верхнем регистре. Если он не совпал, ничего не делайте.
  5. (%) голых процентов. (?5Percent:), если группа захвата (5) совпала, замените ее на Percent. Если он не совпал, ничего не делайте.
  6. (\W) символ, не являющийся словом (a-z, 0-9 и т. д.), включая пробелы. (?6:) если группа захвата (6) совпала, заменить ее ничем. Если он не совпал, ничего не делайте.

  • /g глобальный модификатор - т. е. не останавливаться только на первом совпадении. Я удалил модификатор i - нечувствительный к регистру, так как он не нужен в моем регулярном выражении.

Поскольку группы захвата сопоставляются и заменяются по порядку, он заменяет объекты HTML перед просмотром голых амперсандов и удаляет символы, не являющиеся словами, в последнюю очередь.

Для получения дополнительной информации о синтаксисе замены см. http://www.boost.org/doc/libs/1_61_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html

person Keith Hall    schedule 07.07.2016
comment
Ты, мой друг, гений. Теперь я понимаю, почему мои предыдущие попытки не сработали так хорошо, если не сказать больше. Кроме того, объяснение того, что делает каждое условное выражение в строке, было потрясающим. Слава сэр! - person Hinukan; 07.07.2016
comment
@Hinukan, твои усилия были хорошим началом! :) Я только что понял, что изначально пропустил одно из ваших требований - преобразование &amp; в And - теперь я отредактировал свой ответ, включив это (при этом удаляя другие объекты HTML, а также все еще преобразовывая голые & в And) :) - person Keith Hall; 07.07.2016
comment
Потрясающе - я ценю это, сэр! - person Hinukan; 07.07.2016