如何检测字符串中的特定范围是否在换行符中?

时间:2016-01-26 05:48:22

标签: javascript jquery regex

我有一个这样的字符串:

var str = "this is test1
           this is test2
           this is test3";

现在我想要的是,如果该范围的两边都是\n,则返回true,否则返回false。在上面的例子中,只有这三个范围是正确的:

[0 - 12] => true

[14 - 26] => true

[27 - 39] => true

所有其他范围必须为false。像这样:[1 - 12][5 - 17],...

注意:该范围之前和之后的空格无关紧要。例如:

var str = "     this is a test    ";

现在这个范围是true[0 - 20][2 - 18][5 - 22],...

实际上,我正在尝试创建一个降价编辑器,现在我正在研究它的代码方法按钮。所以我需要知道,如果所有选定的文本(该范围)都在一行中,那么在它之前附加4个空格,否则附加两个“`”环绕它。

1 个答案:

答案 0 :(得分:1)

尝试使用onselect事件,将每行输入文本存储在一个数组中,使用RegExp \n检查每行的已保存变量。另请参阅Getting currently selected text

var textarea = document.querySelector("textarea"), re = /\n/;

textarea.onselect = function(e) {
  var res = [];
  // current selection
  var sel = this.value.slice(this.selectionStart, this.selectionEnd);
  // create array of input value split at new line characters
  var matches = this.value.split(re);
  // split input value at new line characters
  // return `true` or `false`
  var selected = sel.split(re);
  for (var i = 0; i < selected.length; i++) {
    if (matches.indexOf(selected[i]) !== -1) {
      res.push(true)
    } else {
      res.push(false)
    }
  }

  console.log(matches, res, selected)
}
<textarea style="width:300px;height:200px">
  this is test1
  this is test2
  this is test3</textarea>