Javascript—如果StartsWith,则查找并剪切

Javascript — Find And Cut if StartsWith

本文关键字:查找 如果 StartsWith Javascript      更新时间:2023-09-26

我需要查看第一行文本是否以By开头,如果为true,则剪切整行并将其存储在变量中,并删除所有空行,直到下一段开始。查找By的方法需要不区分大小写,并且它可能也有一些前面的空白。如果第一行不是以By开头,则为do nothing

var findBy = 'By Bob';
if (findBy.startsWith('By ')) {
findBy = copyBy;
findBy.split("'n").slice(1).join("'n");
}
var pasteBy = copyBy; 

让我重新表述一下:查找第一行是否以By开头。如果是,请将包含By的整行保存在变量中,然后将其删除。

调整。。。

function removeBy(textArray) {
  var capture = false;
  rebuild = [];
  for (var i=0,len=textArray.length; i<len; i++) {
    var s = textArray[i].trim();
    if (s.substring(0,3).toUpperCase()==="BY ") {
      capture = true;
    } else if (capture && s!=="") {
      capture = false;
    }
    if (capture) {
      rebuild.push(s);
    }
  }
  return rebuild;
}

此函数假定您正在发送一个字符串数组,并返回一个剥离的数组。

var answer = removeBy(["By Bob", "", "", "This is the result"]);
// answer = ["By Bob"];

Fiddle:http://jsfiddle.net/rfornal/ojL72L8b/

如果传入数据用换行符分隔,则可以使用.strip()函数使textArray;反过来,返回的rebuild可以与answer.join("'n"); 放回一起

更新

根据评论,将substring更改为(0,3),并与"BY "(空格)进行比较,使其仅关注BY,而不是类似BYA的内容。

更新Fiddle:http://jsfiddle.net/rfornal/b5gvk48c/1/

如果我完全理解您的需求,您可以使用此regex
(可能不是最强大的,我根本不是正则表达式专家)

/^('s'bby'b|'bby'b).*$/gmi
  • 从最后一个修饰符开始的小演练:
     g全局,它不会在第一次出现时返回
     m多行^$将匹配行的开始/结束,而不是字符串
     i不敏感,我打赌你明白了
  • 现在,回到开头
     ^将在字符串的开头进行搜索
     (x|y)是一个具有两个可选项(x或y)的捕获组
     's'是任何空白(''r''n''t''f)
     'bword'b是单词的边界,例如它不会捕获"单词s"
     .*匹配任何字符(换行符除外),直到
     此处为字符串/行的$结尾

//those should be found
var text = "by test 1 'n" +
  " by test 2 'n" +
  "By test 3 'n" +
  " By test 4 'n" +
  //Those should not
  "test By 5 'n" +
  "test by 6 'n" +
  "Bya test 7 'n" +
  "bya test 8 'n" +
  " Bya test 9 'n" +
  " bya test 10 'n";
var matchingLines = text.match(/^('s'bby'b|'bby'b).*$/gmi);
document.querySelector('p').textContent = "|" + matchingLines.join("|") + "|";
<p/>