使用匹配关键字存储 JavaScript 中所有特定字符出现的行号

Storing the line number of all the occurrence of particular character in JavaScript using match keyword

我正在关注 link ,它存储数组中所有出现的“{”的行号,但仅当用户在文本区域中键入时,即在按键时。如果我们直接将内容粘贴到 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>

您可以通过按换行符拆分并在每行中找到 { 的出现来做到这一点。

  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>