2013-05-19 2 views
2

У меня есть строка, которая может содержать в ней новый символ '\ n'. Теперь я хочу вставить новую строку '\ n' после каждого 4 (или N) символов в этой строке.Как вставить новую строку после N char count в javascript?

Например:

1) ВХОД: "Я John Doe".

ВЫВОД: "Я \ nJohn \ nDoe"

В приведенном выше примере вставки '\ п' после того, как 4 полукокса, включая пространства

2) ВХОД: "Я \ Nam John Doe"

ВЫХОД: "I \ Nam J \ Нон \ nDoe"

в приведенном выше примере вставки пробела после 4 символов после первого '\ п' уже присутствует в строке

3) ВХОД: 12345 \ n67890

ВЫХОД: 1234 \ n5 \ n6789 \ n0

4) ВХОД: "1234 \ N56 \ n78901"

ВЫХОД: «1234 \ N56 \ n7890 \ n1 "

До сих пор я создал функцию, которая вставляет '\ n' после каждых 4 символов , но она не учитывает '\ n', если она уже присутствует в исходной строке.

function addNewlines(str) { 
    if (str.length >= 4) { 
    var result = ''; 
    while (str.length > 0) { 
     result += str.substring(0, 4) + '\n'; 
     str = str.substring(4); 
    } 
    return result; 
    } 
    return str; 
} 

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

Дайте мне знать, что я могу объяснить дальше. С большим количеством примеров.

+0

Пожалуйста, подтвердите свой второй пример, первый вставленный \ п после 5 символов, почему? Другие примеры также помогут. Я также обнаружил, что * вокруг символов '\ n' запутывает, вносит и выводит именно те строки, которые вам нужны. – HBP

+0

У меня есть *. Пожалуйста, не рассматривайте кавычки, чтобы просто представлять строку. –

+0

В вашем описании указано, что вы хотите добавить новую строку после * каждого * четырех символов (или четырех символов после существующей новой строки), но ваши примеры показывают только * одну * новую строку, добавленную в строку. Что это, только одна новая строка, добавленная в общей сложности, или новая строка после каждых четырех символов? –

ответ

2

Вот моя догадка, как к тому, что просили:

function addNewLines (str) { 
     return str.replace (/(?!$|\n)([^\n]{4}(?!\n))/g, '$1\n'); 
} 

Некоторые тестовые строки и их результаты:

"I am John Doe.", -> "I am\n Joh\nn Do\ne." 
"I\nam John Doe", -> "I\nam J\nohn \nDoe" 
"12345\n67890",  -> "1234\n5\n6789\n0" 
"1234\n56\n78901", -> "1234\n56\n7890\n1" 
"ABCD\nEFGH\nIJKL", -> "ABCD\nEFGH\nIJKL\n" 
"1234",    -> "1234\n" 
"12341234"   -> "1234\n1234\n" 

Для тех из вас, для которых регулярные выражения загадочны здесь является пробой:

---------------------------- (?!  Check that following character(s) are not     
    | ------------------------- $|\n Beginning of string or a newline character     
    | | ---------------------)     
    | | | -------------------- (  Start of capture group 1   
    | | || ------------------ [^\n] Any single character other than newline   
    | | || | -------------- {4} Previous element repeated exactly 4 times   
    | | || | | ----------- (?! Check that following character(s) are not 
    | | || | | | ---------  \n a newline  
    | | || | | | | ------- )  
    | | || | | | | |------)  End of capture group 1 
    | | || | | | | || ---- /g  in replace causes all matches to be processed 
    | | || | | | | || | 
/(?!$|\n)([^\n]{4}(?!\n))/g 
+0

Спасибо. Он возвращает ожидаемые результаты. –

0
  1. Разделите строку на "\ n" str.split ("\ n"). Вы получаете массив строк.
  2. Выполняйте дополнительную проверку и обработку элементов длины элемента и поместите результат в новый массив. Результаты.
  3. Соедините строки, используя results.join ("\ n").

Это удалит «\ п» дубликаты тоже, если вы избегаете добавлять или перед именем «\ п» к результатам элементов.

0

Вот мой код:

function ngram_insert (n, ins, input) 
{ 
    var output = ""; 
    var i = 0; 

    while (i < strlen(input)) 
    { 
     if (i > 0 && i % n == 0) 
     { 
      output += ins; 
     } 

     output += input[i]; 

     i++; 
    } 

    return output; 
} 

Тест:

var output = ngram_insert (3, "\n", "This is a test."); 
0
function f(n, ins, str) { 

     if (str.length == 0) 
      return ""; 

     var i = str.indexOf("\n"), len = str.length, newStr; 
     if (i == -1) { 
      i = 1; 
      newStr = str[0]; 
     } 
     else { 
      newStr = str.substring(0, i + 1); 
     } 

     var k = 1; 

     while (k + i < len) { 
      newStr += str[k + i]; 

      if (k % n == 0) { 
        newStr += ins; 
      } 

      k++; 
     } 

     return newStr; 
} 

Вызов f(4, "\n", "I\nam John Doe"); возвращается "I\nam J\nohn \nDoe"

1
function parseInput(str, char, length){ 
    var split = str.split(char), 
     regex = RegExp('(.{' + length + '})','g'); 

    split[split.length-1] = split[split.length - 1].replace(regex, '$1' + char); 
    return split.join(char); 
} 

console.log(parseInput("I am John Doe.", "\n", 4)); 
// output = "I am\n Joh\nn Do\ne." 
Смежные вопросы