我有一个这样的字符串:
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个空格,否则附加两个“`”环绕它。
答案 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>