代码之家  ›  专栏  ›  技术社区  ›  Lee Cheung

查找以两位数字和一个字母开头的字符串

  •  0
  • Lee Cheung  · 技术社区  · 5 年前

    我正在做一个javascript代码来隐藏网站上没有以特定文本开头的元素。

    有一组组合可以在 <span> 在网站上。它们都以2位数字开始,然后是一个字母。例如:

    76T
    92Q
    18H
    71S
    

    有时字符串在行尾也包含文本。 但现在,我正试图找出哪些行包含两个数字(不管是哪个),以及后面的字母“F”。比如92F,35F,19F等等。

    我正在尝试使用javascript.match,但没有得到任何结果。它说不存在这样的功能。

    我的代码:

    var descriptions = document.getElementsByClassName('myClass');
    var reg = new RegExp("^([0-9])F(.*)");
    
    for (var i=0; i<descriptions.length; i++) {
        if (descriptions[i].match(reg)) {
            console.log('it exists!');
        }
    }
    

    基本上,我只需要所有以数字(0-9)和字母f开头的字符串,它们之间没有空格。

    网站上的输出如下:

    <span class="myClass">36P Wooden</span>
    

    编辑:

    隐藏/删除不包含此文本的分隔符。

    var descriptions = document.getElementsByClassName('myClass');
    var reg = /^\d{2}F/;
    
    for (var i=0; i<descriptions.length; i++) {
        if (!descriptions[i].textContent.match(reg)) {
            descriptions[i].closest('myClass2').style.display = 'none';
        }
    }
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   CertainPerformance    5 年前

    getElementsByClassName .match textContent regex literals instead of new RegExp

    var descriptions = document.getElementsByClassName('myClass');
    var reg = /^\d{2}F/;
    
    for (var i=0; i<descriptions.length; i++) {
        if (descriptions[i].textContent.match(reg)) {
            console.log('it exists!');
        }
    }
    

    var descriptions = document.getElementsByClassName('myClass');
    var reg = /^\d{2}F/;
    
    for (var i=0; i<descriptions.length; i++) {
        if (descriptions[i].textContent.match(reg)) {
            console.log('it exists!', descriptions[i]);
        }
    }
    <span class="myClass">36P Wooden</span>
    <span class="myClass">11F something</span>

    .filter

    var descriptions = document.getElementsByClassName('myClass');
    var reg = /^\d{2}F/;
    
    const matchingElements = [...document.querySelectorAll('.myClass')]
      .filter(elm => elm.textContent.match(reg));
    console.log(matchingElements);
    <span class="myClass">36P Wooden</span>
    <span class="myClass">11F something</span>
    <span class="myClass">22F something else</span>

    Array.from filter

    var descriptions = document.getElementsByClassName('myClass');
    var reg = /^\d{2}F/;
    
    const matchingStrings = Array.from(
      document.querySelectorAll('.myClass'),
      elm => elm.textContent
    )
      .filter(textContent => textContent.match(reg));
    console.log(matchingStrings);
    <

    .every myClass

    const parentsWithNoMatches = [...document.querySelectorAll('.myClass2')]
      .filter(parent =>
        [...parent.querySelectorAll('.myClass')]
          .every(child => !child.textContent.match(reg))
      );