Читать символы цепи текста перед местом с Javascript

Я нуждаюсь в том, чтобы сделать следующее, и не нахожу форму, подходящую для того, чтобы это делать...

Это код функции, которая помещает двух табулировавших (два типа места с \t), найдя первое место внутри переменной 'customText'.

function generatePageLinks(text, isChapter, pageId) {

        //Variable auxiliar que captura el texto de la página de 'text'.

        var aux = text;
        var customText = aux.replace(" ", "\t\t");


        var $element = $(document.createElement('td'));
        var $link = $('<a class="hier-link"></a>').attr('href', '#').attr('data-page-id', pageId).text(customText);

        $element.append('<div class="text-wrapper">');
        $element.append($('<pre class="hier-move">').html(isChapter ? customText : $link));
        return $element;

    }

Нуждалась в том, чтобы улучшить эта функцию, для того, чтобы он применил двух табулировавших, когда будет 2 символа перед местом, и табулировавшим уникумом в случае, если будет 3 символа перед местом.

Он реальный? Тысячи спасибо перед рукой!.

4
задан 28.06.2016, 17:20
5 ответов

Он использует indexOf... Он служит для того, чтобы получить первую ubicaciГіn от данной цепи.

Пример

if (aux.indexOf(' ') == 2) {
  // hay dos caracteres antes del primer espacio 
  var customText = aux.replace(" ", "\t\t"); // se remplaza por 2 tabs
} else if (aux.indexOf(' ') == 3) {
  // hay 3
  var customText = aux.replace(" ", "\t"); // se reeplaza por 1 tab
} else {
   // otro caso
}

типов Привета

4
ответ дан 24.11.2019, 13:58
  • 1
    Совершенный, это та, которая дала в гвозде. Большое спасибо приятель и # 241; ero!. – djohny 28.06.2016, 14:14

Ты можешь использовать регулярные выражения:

texto = texto.replace(/([^\s]{2})\s/, "$1\t\t");
texto = texto.replace(/([^\s]{3})\s/, "$1\t");

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

Вторая линия заменяет три символа, следуемых местом этими тремя символами, следуемыми единственным табулятором.

Деталь регулярного выражения

  • [^\s] это значит: любой характер, который не был бы местом
  • [^\s]{2} это значит: любой характер, который не был бы местом, повторенным 2 раза

Если мы группируем что-то со скобкой, как я сделал с ([^\s]{2}), это позволяет нам использовать это потом, заменив. А именно, что сохраняет это совпадение, чтобы использовать ее после, посредством $1. Если бы было несколько групп, мы использовали бы $1, $2, $3, и т.д.

Визуальной формы:
regexper

Следовательно, возвращаясь к replace, мы ищем 2 символа, которые не были бы местом (мы сохраняем их в $1), следуемые местом, и мы заменяем их из-за $1 следуемый двумя табуляторами.
И во второй линии, вместо 2 символов их 3, и вместо 2 табуляторов, это один.

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

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

5
ответ дан 24.11.2019, 13:58
  • 1
    Как он coment и # 233; в другого приятеля и # 241; ero, учиться и # 233; поскольку они функционируют, так как в верхнем курсе и до настоящего времени, не hab и # 237; во ввиду случая, чтобы это использовать. Большое спасибо!. – djohny 28.06.2016, 14:15

Это хороший случай использовать регулярные выражения, ищет какой-то руководитель RegExpr и играет немного с каким-либо из сайтов доказательств RegEx как например https://regex101.com/#javascript

однажды ты привык немного к этим игрушкам, протестируй следующие регулярные выражения против твоих цепей доказательств

было выражение ^(\S{2})\s догони, когда есть точно два символа в начало цепи, что это не место, за которым следует место в мишени и захватывает два символа.

будь другой ^(\S{3})\s он это делает, когда есть точно три символа в начало цепи, которые не место, за которым следует место в мишени.

Использовать эти регулярные выражения в javascript, чтобы заменять место табуляторами, очень легко.

Просто используй string.replace() с ними как первый параметр, и используя текст, захваченный в цепи.

text.replace(/^(\S{2})\s/, "$1\t\t");

или

text.replace(/^(\S{3})\s/, "$1\t");
2
ответ дан 24.11.2019, 13:58
  • 1
    Если hab и # 237; в него и # 237; do, что-то в ищет примеры в Google, я принимаю к сведению и обрабатывать информацию и # 233; придавания смыслом ему и изучения cu и # 225; ndo они должны или могут быть использованными, большое спасибо!. – djohny 28.06.2016, 14:13

SegГєn, поскольку ты это выдвигаешь не, если ты только хочешь remplazar первую apariciГіn пространств или всех раз, которые появляются.

, Если одинокая первая рекомендуемое serГ, - чтобы делать одну bГєsqueda с indexOf.

Однако я думаю, что ты имеешь в виду заменять все тройственность пространства на табулятор, и двойные порции из-за 2 табуляторов. В этом случае правильное serГ - в:

var customText = text.replace(/^[ ]{3}/, "\t")
                     .replace(/^[ ]{2}/, "\t\t");

Сначала: квадратные скобки не являются строго необходимыми, но они разместил для deja explГ-citamente просвет, что remplazan нормальные пространства в мишени. Он не правилен использовать "\s", так как этот оператор принимает во внимание tambiГ©n табуляторы и прыжки линии.

Секунда: Осуществляется тот 3 пространств сначала, так как случай 2 - сходный, но несовершеннолетний и этот может затрагивать другого.

"   " cambiaría por "\t\t " y ya el cambio de 3 no tendría efecto.
0
ответ дан 24.11.2019, 13:58
  • 1
    я думаю, что твой ответ не отвечает на требование OP. Он не стремится к тому, чтобы изменить два или три начальных символа, а место, которое следует за вышеупомянутыми символами. – PA. 28.06.2016, 16:46

Ты можешь использовать javascript таким образом:

var str = "Hello world!"; var домашнее животное = str.substr (0, 2);

Оказавшиеся

He

Или ты можешь делать это tambiГ©n:

var str = "Hello world!";
var res = str.split(" ");

Оказавшийся

res[0] = Hello
res[1] = world!

Надеялся, что он подает тебе

0
ответ дан 24.11.2019, 13:58
  • 1
    Если, спасибо, и #233; ste м и # 233; все conoc и # 237; в, но чтобы делать validaci и # 243; n seg и # 250; n condici и # 243; n, не podr и # 237; чтобы это использовать не? Эдж. if (у текста есть 2 символа перед местом) {делать....} else if (если у него есть 3...) может применять к себе твой пример в и #233; sta необходимость?. – djohny 28.06.2016, 11:57
  • 2
    если бы, ты мог делать это так: numeroEspaciosBlanco = res.length; и с if else numro места –  28.06.2016, 12:27