我有以下函数检测textarea中的匹配,然后删除当前块。
function deleteValue() {
var name = document.getElementById("name").value;
var textarea = document.getElementById("result");
if (textarea.value.match("name"))
{
var lines = textarea.value.split('\n');
lines.splice(3,8);
var modify = lines.join('\n');
textarea.value = modify;
}
}
我希望能够为此添加一些逻辑来检测textarea中存在name
的位置并从该行开始。我应该使用哪种javascript方法?
答案 0 :(得分:4)
您可以将逻辑包装在迭代给定文本行的函数中,并返回一个列表,其中包含与搜索模式匹配的行索引(或精确搜索词)。
然后,您可以适当地使用这些索引,例如,从原始文本中删除这些行。
function findMatches(text, pattern) {
var matchingLines = [];
var allLines = text.split("\n");
for (var i = 0; i < allLines.length; i++) {
if (allLines[i].match(pattern)) {
matchingLines.push(i);
}
}
return matchingLines;
}
另请参阅此 short demo 。
要记住以下几点:
*在上面的例子中,“模式”被JS视为正则表达式模式,例如“工商业污水附加费。”将匹配“test”,“tess”,“tes6”等。如果您想要文字匹配,请将allLines[i].match(pattern)
替换为allLines[i].indexOf(pattern) != -1
。
*假设行以“\ n”结尾。如果您的规格不同,请相应地进行修改。
*在上面的简短演示中,线寻找部分和线移除部分是分开的,导致更复杂的代码(为了灵活性)。如果您只想删除匹配的行,可以一次完成此操作,如下所示:
function removeMatches(text, pattern) {
var outputLines = [];
var inputLines = text.split("\n");
for (var i = 0; i < inputLines.length; i++) {
if (!inputLines[i].match(pattern)) {
outputLines.push(inputLines[i]);
}
}
return outputLines.join("\n");
}