Сохранение номера строки всех вхождений конкретного символа в JavaScript с использованием ключевого слова match - PullRequest
0 голосов
/ 16 января 2019

Я перешел по ссылке Сохранение номера строки всех вхождений определенного символа в javascript , в котором хранится номер строки всех вхождений "{" в массиве, но только когда пользователь вводит текст в области текстат.е. на нажатие клавиши.Это не сработало, если мы напрямую вставили содержимое в textarea.Поэтому я использовал ключевое слово onchange и match для поиска и сохранения номера строки в массиве.

Содержимое текстовой области:

Hello {    
The next match here line number  {   
Bla Bla 
blah bla 
blah blah 
The next match here line number  {    
end textarea 

Требуемый вывод: 1 2 6

Но вывод показывает последнее число: 7

Пожалуйста, подскажите, что не так в этом коде, предоставив правильное решение.Я не хочу использовать jquery.

var arr = [];
var c = 0;

function hello() {
  var str = document.getElementById('editor').value;
  if (str.match(/{/)) {
    arr[c++] = getLineNumber();
  }

  document.getElementById("lineNo").innerHTML =
    "Array content is...   " + arr.join(' ');
}

function getLineNumber() {
  var ta = document.getElementById("editor")
  var x = ta.value.substr(0, ta.selectionStart).split("\n").length;
  return x;
}
<textarea rows="30" cols="100" id="editor" onchange="hello();"></textarea>
<div id="lineNo"></div>

1 Ответ

0 голосов
/ 16 января 2019

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

  var arr = [];
  var c = 0;
  function hello() {
    var str=document.getElementById('editor').value; 
    lines = str.split(/\r?\n/);
    lines.forEach((line,index) => {      
        if (line.match(/{/)) {
          arr[c++] = index;  
        }
    })
    document.getElementById("lineNo").innerHTML=
      "Array content is...   "+ arr.join(' ');    
  }
<textarea rows="30" cols="100" id="editor" oninput="hello();" ></textarea>
<div id="lineNo"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...